// 0667. Beautiful Arrangement II
class Solution {
public int[] constructArray(int n, int k) {
int[] ans = new int[n];
ans[0] = 1;
int i = 1;
boolean ascending = true;
int low = 2;
int high = n;
while (k > 1) {
if (ascending) {
ans[i] = high;
--high;
} else {
ans[i] = low;
++low;
}
ascending = !ascending;
--k;
++i;
}
if (ascending) {
while (i < n) {
ans[i] = ans[i - 1] + 1;
++i;
}
} else {
while (i < n) {
ans[i] = ans[i - 1] - 1;
++i;
}
}
return ans;
}
}
学习笔记:
这是一道有趣的数组题目,一开始没思路。
后来拿出纸笔来举例子就有了。
比如要5个数字,4个变化。
那么就是1,5,2,4,3。
然后多一点,9个数字,8个变化。
1,9,2,8,3,7,4,6,5。低高低高交替
然后思考如果变化变少呢?
9个数字,3个变化。
1,9,2,3,4,5,6,7,8。
也就是低高低高交替,交替前3次,然后就一直持续+1或-1变化就不变了。
这道和之前某个做过的题目很像,我教过学生,但忘记具体是哪题了。