问题:
方法:
只有两种情况,一种是同加同减,另一种是半加半减。先将数组进行排序,同加同减的情况,最小差值为A[lastIndex] - A[0];半加半减的情况,最小差值为相加部分队尾、队头和相减部分队尾、队头的最大区间的最小值,遍历数组作为相加部分和相减部分的分隔点,最后即可输出结果。
具体实现:
class SmallestRangeII {
fun smallestRangeII(A: IntArray, K: Int): Int {
A.sort()
var res = A.last() - A.first()
for (index in 1..A.lastIndex) {
val min = minOf(A.first() + K, A[index] - K)
val max = maxOf(A.last() - K, A[index - 1] + K)
res = minOf(res, max - min)
}
return res
}
}
fun main(args: Array<String>) {
val A = intArrayOf(0, 10)
val K = 2
val smallestRangeII = SmallestRangeII()
println(smallestRangeII.smallestRangeII(A, K))
}
有问题随时沟通
网友评论