zoukankan      html  css  js  c++  java
  • [Swift]LeetCode910. 最小差值 II | Smallest Range II

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址: https://www.cnblogs.com/strengthen/p/10609971.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    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. 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
    输出:3
    解释:B = [4,6,3] 

    提示:

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

    Runtime: 152 ms
    Memory Usage: 19.2 MB
     1 class Solution {
     2     func smallestRangeII(_ A: [Int], _ K: Int) -> Int {
     3         if A.count <= 1 {
     4             return 0
     5         }
     6         let arr = A.sorted { (num1, num2) -> Bool in
     7             return num1 < num2
     8         }
     9         let min1 = arr.first! + K
    10         let max1 = arr.last! - K
    11         var res = arr.last! - arr.first!
    12         for i in 1 ..< arr.count {
    13             let min2 = min(min1, arr[i] - K)
    14             let max2 = max(max1, arr[i - 1] + K)
    15             let temp = max2 - min2
    16             res = temp > res ? res : temp
    17         }
    18         return res
    19     }
    20 }

    164ms

     1 class Solution {
     2     func smallestRangeII(_ A: [Int], _ K: Int) -> Int {
     3         var A = A.sorted()
     4         if A.count == 0 || A.count == 1 {
     5             return 0
     6         }
     7         if A[A.count - 1] - A[0] <= K {
     8             return A[A.count - 1] - A[0]
     9         }
    10         var diff = A[A.count - 1] - A[0]
    11         for i in 0..<(A.count - 1){
    12             let high = max(A[i] + 2 * K, A.last!)
    13             let low = min(A[i + 1], A.first! + 2 * K)
    14             diff = min(diff, high - low)
    15         }
    16         return diff
    17     }
    18 }

    344ms

     1 class Solution {
     2     func smallestRangeII(_ A: [Int], _ K: Int) -> Int {
     3         var A = A.sorted()
     4         var n:Int = A.count
     5         var mx:Int = A[n - 1]
     6         var mn:Int = A[0]
     7         var res:Int = mx - mn
     8         for i in 0..<(n - 1)
     9         {
    10             mx = max(mx, A[i] + 2 * K)
    11             mn = min(A[i + 1], A[0] + 2 * K)
    12             res = min(res, mx - mn)
    13         }
    14         return res
    15     }
    16 }

    392ms

     1 class Solution {
     2     func smallestRangeII(_ A: [Int], _ K: Int) -> Int {
     3         var newA = Array(Set(A)).sorted()
     4         let n = newA.count - 1
     5         var min = newA[n] - newA[0]
     6         if newA.count <= 1{
     7             return 0
     8         }
     9         for i in 1..<newA.count{
    10             var arr = [(newA[0]+K),(newA[i-1] + K),(newA[i] - K),(newA[n] - K)]
    11             arr.sort()
    12             let temp = arr.last! - arr.first!
    13             if temp < min {
    14                 min = temp
    15             }
    16         }
    17         return min
    18     }
    19 }
  • 相关阅读:
    纪念又一次ak
    hdu5618
    bzoj3393
    bzoj3438
    [JSOI2007]建筑抢修
    [CQOI2014]数三角形
    [BZOJ2662][BeiJing wc2012]冻结
    [NOIP2015]运输计划
    [ZJOI2006]超级麻将
    [APIO2009]抢掠计划
  • 原文地址:https://www.cnblogs.com/strengthen/p/10609971.html
Copyright © 2011-2022 走看看