题目
https://leetcode.com/problems/beautiful-arrangement-ii/
题解
偏智力题,评论区有人说,A typical question testing whether you’re “smart” rather than “taking algorithm class”.
官方 O(n) 题解没看懂(没仔细看),评论区 看到一个 O(n^2) 的解法,比较清晰。
数据量 n=10^4,O(n^2)
的解能通过,说明在力扣上指令条数 1*10^8 是可以通过的。
class Solution {
public int[] constructArray(int n, int k) {
// 初始化为1到n,此时差值为1种
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = i + 1;
}
// 然后从第二位到末位开始不停翻转,每翻转一次增加一种差值
for (int i = 1; i < k; i++) {
swap(arr, i, n - 1);
}
return arr;
}
public void swap(int[] arr, int L, int R) {
for (int i = 0; i <= (R - L) / 2; i++) {
int t = arr[L + i];
arr[L + i] = arr[R - i];
arr[R - i] = t;
}
}
}
效率很低,意料之中