LeetCode: Smallest Range II Posted on September 28, 2018July 26, 2020 by braindenny Smallest Range II Similar Problems: LeetCode: Smallest Range I CheatSheet: Leetcode For Code Interview CheatSheet: Common Code Problems & Follow-ups Tag: #interval, #greedy Given an array A of integers, for each integer A[i] we need to choose either x = -K or x = K, and add x to A[i] (only once). 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: 3 Explanation: B = [4,6,3] Note: 1 <= A.length <= 10000 0 <= A[i] <= 10000 0 <= K <= 10000 Github: code.dennyzhang.com Credits To: leetcode.com Leave me comments, if you have better ways to solve. Solution: // https://code.dennyzhang.com/smallest-range-ii // Basic Ideas: greedy // // Sort the list. The initial difference is A[N-1]-A[0] // // Try to add for small values, subtract for big values // For the biggest value, we always substract. // And for the smallest, we always add. // // Complexity: Time O(n*log(n)), Space O(1) import "sort" func min(x, y int)int { if x>y { return y } else { return x } } func max(x, y int)int { if x>y { return x } else { return y } } func smallestRangeII(A []int, K int) int { sort.Ints(A) res := A[len(A)-1]-A[0] for i:=0; i+1<len(A); i++ { high := max(A[len(A)-1]-K, A[i]+K) low := min(A[0]+K, A[i+1]-K) res = min(res, high-low) } return res } Post Views: 0