问题:
![]()
方法:
本题有一个关键限定条件,一个是数组元素是1..n和数组长度相同,所以输出数组必是1..n的某种排序。则必有k+1个元素存在k个不同的差值,同时剩余的n-(k+1)个元素必是相同的差值,选最小差值为1则剩余的n-(k+1)个元素顺序排列即可,同时前k+1个元素使用如下排列,1, k+1, 2, k, 3, k-1..,差值分别为k, k-1, k-2, k-3 .. 1,正好满足题意。
class BeautifulArrangementII {
fun constructArray(n: Int, k: Int): IntArray {
val result = IntArray(n) {
0
}
for (index in 0..k step 2) {
result[index] = index / 2 + 1
}
for (index in 1..k step 2) {
result[index] = k + 1 - index / 2
}
for (index in k + 1..(n - 1)) {
result[index] = index + 1
}
return result
}
}
fun main(args: Array<String>) {
val beautifulArrangementII = BeautifulArrangementII()
val result = beautifulArrangementII.constructArray(8, 6)
CommonUtils.printArray(result.toTypedArray())
}
有问题随时沟通
网友评论