[Swift]LeetCode908. 最小差值 I | 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

给定一个整数数组 A,对于每个整数 A[i],我们可以选择任意 x 满足 -K <= x <= K,并将 x 加到 A[i] 中。

在此过程之后,我们得到一些数组 B

返回 B 的最大值和 B 的最小值之间可能存在的最小差值。 

示例 1:

输入:A = [1], K = 0
输出:0
解释:B = [1]

示例 2:

输入:A = [0,10], K = 2
输出:6
解释:B = [2,8]

示例 3:

输入:A = [1,3,6], K = 3
输出:0
解释:B = [3,3,3] 或 B = [4,4,4] 

提示:

  1. 1 <= A.length <= 10000
  2. 0 <= A[i] <= 10000
  3. 0 <= K <= 10000

16ms
 1 class Solution {
 2     func smallestRangeI(_ A: [Int], _ K: Int) -> Int {
 3         var smallest = A[0], largest = A[0]
 4         for num in A {
 5             if num < smallest { smallest = num }
 6             else if num > largest { largest = num }
 7         }
 8         let diff = largest - smallest
 9         if diff <= 2 * K {
10             return 0
11         } else {
12             return diff - 2 * K
13         }
14     }
15 }

120ms

 1 class Solution {
 2     func smallestRangeI(_ A: [Int], _ K: Int) -> Int {
 3         var ma = Int.min
 4         var mi = Int.max
 5         for num in A {
 6             ma = max(ma,num)
 7             mi = min(mi,num)
 8         }
 9         return (ma-mi) <= 2*K ? 0 : ma-mi-2*K
10     }
11 }

124ms

 1 class Solution {
 2     func smallestRangeI(_ A: [Int], _ K: Int) -> Int {
 3         guard A.count > 1 else {
 4             return 0
 5         }
 6         let mx = A.max()!
 7         let mi = A.min()!
 8         return max(0, mx - mi - K * 2)
 9     }
10 }

124ms
1 class Solution {
2     func smallestRangeI(_ A: [Int], _ K: Int) -> Int {
3         var A = A.sorted()
4         guard let first = A.first, let last = A.last else {
5             return 0
6         }
7         return (last - first - 2 * K) > 0 ? (last - first - 2 * K) : 0
8     }
9 }

Runtime: 140 ms

Memory Usage: 19 MB
 1 class Solution {
 2     //抓住最大值与最大值之间的重点关系,
 3     //因为其他数可以通过加减K靠近极值
 4     func smallestRangeI(_ A: [Int], _ K: Int) -> Int {
 5         //如果数组只有一个数字则返回0
 6         if A.count==1{return 0}
 7         //初始化最大值
 8         var maxNum:Int = A[0]
 9         //初始化最小值
10         var minNum:Int = A[0]
11         //遍历数组
12         for i in 0..<A.count
13         {            
14             if A[i] > maxNum
15             {
16                 maxNum = A[i] 
17             }
18             if A[i] < minNum
19             {
20                 minNum = A[i] 
21             }
22         }
23         if minNum+2*K>=maxNum
24         {
25             return 0
26         }
27         else
28         {
29             return maxNum-minNum-2*K
30         }
31     }
32 }

148ms

1 class Solution {
2     func smallestRangeI(_ A: [Int], _ K: Int) -> Int {
3         return max(0, (A.max() ?? 0) - (A.min() ?? 0) - 2*K)
4     }
5 }

180ms

 1 class Solution {
 2     func smallestRangeI(_ A: [Int], _ K: Int) -> Int {
 3         guard A.count != 1 else {
 4             return 0
 5         }
 6         var max = A[0]
 7         var min = A[0]
 8         for i in A {
 9             max = i > max ? i : max
10             min = i < min ? i : min
11         }
12         var diff = max - min
13         return abs(K * 2) >= diff ? 0 : diff - abs(K * 2)
14     }
15 }

猜你喜欢

转载自www.cnblogs.com/strengthen/p/10610215.html
今日推荐