友情支持
如果您觉得这个笔记对您有所帮助,看在D瓜哥码这么多字的辛苦上,请友情支持一下,D瓜哥感激不尽,😜
|
|
有些打赏的朋友希望可以加个好友,欢迎关注D 瓜哥的微信公众号,这样就可以通过公众号的回复直接给我发信息。

公众号的微信号是: jikerizhi。因为众所周知的原因,有时图片加载不出来。 如果图片加载不出来可以直接通过搜索微信号来查找我的公众号。 |
667. 优美的排列 II
给你两个整数 n 和 k,请你构造一个答案列表 answer,该列表应当包含从 1 到 n 的 n 个不同正整数,并同时满足下述条件:
-
假设该列表是
answer = [a1, a2, a3, … , an],那么列表[|a1 - a2|, |a2 - a3|, |a3 - a4|, … , |an-1 - an|]中应该有且仅有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 <= 104
思路分析
脑筋急转弯。将一部分数据倒转,进行交叉。
-
一刷
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* @author D瓜哥 · https://www.diguage.com
* @since 2026-04-29 22:52:58
*/
public int[] constructArray(int n, int k) {
int[] result = new int[n];
int idx = 0;
for (int i = 1; i < n - k; i++) {
result[idx++] = i;
}
for (int i = n - k, j = n; i <= j; i++, j--) {
result[idx++] = i;
if (i != j) {
result[idx++] = j;
}
}
return result;
}

