908. Smallest Range I

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. 1 <= A.length <= 10000
  2. 0 <= A[i] <= 10000
  3. 0 <= K <= 10000

Rust Solution

struct Solution;

impl Solution {
    fn smallest_range_i(a: Vec<i32>, k: i32) -> i32 {
        if a.is_empty() {
            return 0;
        }
        let max = a.iter().max().unwrap();
        let min = a.iter().min().unwrap();
        let diff = max - min - 2 * k;
        if diff > 0 {
            diff
        } else {
            0
        }
    }
}

#[test]
fn test() {
    let a = vec![1];
    let k = 0;
    let res = 0;
    assert_eq!(Solution::smallest_range_i(a, k), res);
    let a = vec![0, 10];
    let k = 2;
    let res = 6;
    assert_eq!(Solution::smallest_range_i(a, k), res);
    let a = vec![1, 3, 6];
    let k = 3;
    let res = 0;
    assert_eq!(Solution::smallest_range_i(a, k), res);
}

Having problems with this solution? Click here to submit an issue on github.