美文网首页
【月度刷题计划同款】常规"脑筋急转弯"类构造题

【月度刷题计划同款】常规"脑筋急转弯"类构造题

作者: 水三叶的刷题日记 | 来源:发表于2023-08-21 11:28 被阅读0次
## 题目描述 这是 LeetCode 上的 **[667. 优美的排列 II](https://leetcode.cn/problems/beautiful-arrangement-ii/solution/by-ac_oier-lyns/)** ,难度为 **中等**。 Tag : 「构造」、「脑筋急转弯」 给你两个整数 `n` 和 `k` ,请你构造一个答案列表 `answer`,该列表应当包含从 `1` 到 `n` 的 `n` 个不同正整数,并同时满足下述条件: 假设该列表是 $answer = [a_1, a_2, a_3, ... , a_n]$ ,那么列表 $[|a_1 - a_2|, |a_2 - a_3|, |a_3 - a_4|, ... , |a_{n-1} - a_n|]$ 中应该有且仅有 k 个不同整数。 返回列表 `answer`。如果存在多种答案,只需返回其中 任意一种 。 示例 1: ``` 输入:n = 3, k = 1 输出:[1, 2, 3] 解释:[1, 2, 3] 包含 3 个范围在 1-3 的不同整数,并且 [1, 1] 中有且仅有 1 个不同整数:1 ``` 示例 2: ``` 输入:n = 3, k = 2 输出:[1, 3, 2] 解释:[1, 3, 2] 包含 3 个范围在 1-3 的不同整数,并且 [2, 1] 中有且仅有 2 个不同整数:1 和 2 ``` 提示: * $1 <= k < n <= 10^4$ ## 构造 给定范围在 $[1, n]$ 的 $n$ 个数,当「直接升序/降序」排列时,相邻项差值为 $1$,仅一种;而从首位开始按照「升序」间隔排列,次位开始按照「降序」间隔排列(即排列为 `[1, n, 2, n - 1, 3, ...]`)时,相邻差值会从 $n - 1$ 开始递减至 $1$,共 $n - 1$ 种。 那么当我们需要构造 $k$ 种序列时,我们可以先通过「直接升序」的方式构造出若干个 $1$,然后再通过「间隔位分别升降序」的方式构造出从 $k$ 到 $1$ 的差值,共 $k$ 个。 显然,我们需要 $k + 1$ 个数来构造出 $k$ 个差值。因此我们可以先从 $1$ 开始,使用 $n - (k + 1)$ 个数来直接升序(通过方式一构造出若干个 $1$),然后从 $n - k$ 开始间隔升序排列,按照 $n$ 开始间隔降序排列,构造出剩下的序列。 Java 代码: ```Java class Solution { public int[] constructArray(int n, int k) { int[] ans = new int[n]; int t = n - k - 1; for (int i = 0; i < t; i++) ans[i] = i + 1; for (int i = t, a = n - k, b = n; i < n; ) { ans[i++] = a++; if (i < n) ans[i++] = b--; } return ans; } } ``` TypeScript 代码: ```TypeScript function constructArray(n: number, k: number): number[] { const ans = new Array(n).fill(0) const t = n - k - 1 for (let i = 0; i < t; i++) ans[i] = i + 1 for (let i = t, a = n - k, b = n; i < n; ) { ans[i++] = a++ if (i < n) ans[i++] = b-- } return ans }; ``` * 时间复杂度:$O(n)$ * 空间复杂度:$O(n)$ ## 最后 这是我们「刷穿 LeetCode」系列文章的第 `No.667` 篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先把所有不带锁的题目刷完。 在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。 为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库:https://github.com/SharingSource/LogicStack-LeetCode 。 在仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其他优选题解。 更多更全更热门的「笔试/面试」相关资料可访问排版精美的 [合集新基地](https://www.acoier.com/archives/) 🎉🎉

相关文章

  • 刷题计划

    并查集 题目 图论 题目 树 题目 资源参考 倍增LCA LCA和RMQ Tarjan LCA 倍增 题目 DP 题目

  • 刷题计划

    目标:算法题 有思路 能实现(code能力) 实现:300道 leetcode 计划 按类型分类 时间:3个月,...

  • 【轻知识】php模拟面试——算法篇

    如果你遇到了什么算法题或脑筋急转弯题。可以留言给我。我们一起完善。 之前写过一篇关于学习与刷题的。【轻知识】算法的...

  • Leetcode分类

    刷题之前先分好类, 这样归类刷题很高效. Data Structure Array String Linked L...

  • 2022-09-16

    刷题,刷题还是刷题

  • 刷题刷题

    时间紧迫,任务繁重,又有疫情影响,搞的人心惶惶,一时间复习得不安宁,又舍不得摆烂。 在焦灼、惶恐的情绪中,紧张急迫...

  • 2018-07-16

    刷题,祸害的何止是教育? 报班,刷题;买练习册,刷题;家教,刷题;跟不上,刷题;学得好,刷题;为了抢跑,刷题;为了...

  • LeetCode刷题计划

    几个重要问题类型 排序 查找 字符串处理 图问题 组合问题 几何问题 数值问题 几种基本数据结构 线性数据结构 图...

  • 2020.1.30 思维的宽度

    今天刷某音总是刷到一款益智类小游戏的广告,类似于各种脑洞题的集合,因为看到几个还比较有意思的题,我就去下载了,结果...

  • 2020-02-01关于刷题的几个建议

    算法刷题 针对性刷题,刻意练习。刻意刷题!不是麻木刷题!刷题前一定要先看书,清楚明白为什么要刷这些题,这些题刷完能...

网友评论

      本文标题:【月度刷题计划同款】常规"脑筋急转弯"类构造题

      本文链接:https://www.haomeiwen.com/subject/ihoemdtx.html