問題: Given an array A of integers, for each integer A[i] we may choose any x with -K <= x <= K, and add x to A[i]. After this process, we have some array B. Return the smallest possible difference between the maximum value of B and the minimum value of B.
Example 1:
Input: A = [1], K = 0
Output: 0
Explanation: B = [1]
Example 2:
Input: A = [0,10], K = 2
Output: 6
Explanation: B = [2,8]
Example 3:
Input: A = [1,3,6], K = 3
Output: 0
Explanation: B = [3,3,3] or B = [4,4,4]
Note:
1 <= A.length <= 10000
0 <= A[i] <= 10000
0 <= K <= 10000
複製程式碼
方法: 先取出陣列的最大值,然後取出陣列的最小值,如果最大值和最小值的差比K的2倍還要大則最小差為max-min-2*K,否則為0,因為最小差即為0。
具體實現:
class SmallestRangeI {
fun smallestRangeI(A: IntArray, K: Int): Int {
val max = A.max()
val min = A.min()
if (max == null || min == null) {
return 0
}
val result = if ((max - min - K * 2) >= 0) (max - min - K * 2) else 0
return result
}
}
fun main(args: Array<String>) {
val A = intArrayOf(0, 10)
val K = 2
val smallestRangeI = SmallestRangeI()
println(smallestRangeI.smallestRangeI(A, K))
}
複製程式碼
有問題隨時溝通