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

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

    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 }
  • 相关阅读:
    html基础知识
    Python yield 使用浅析
    XSS跨站攻击
    box-sizing的用法(笔记)
    编译原理中DFA最小化
    提醒自己!!!
    Eclipse下运行maven项目失败且Tomcat服务器也启动不了
    Descriptio Resource Path LocationType Archive for required library: 'D:/apache-maven/apache-maven-3.6.0/mavenrepository/org/springframework/spring-aspects/4.3.7.RELEASE/spring-aspects-4.3.7.RELEASE.
    Eclispe创建maven工程缺失web.xml报web.xml is missing and <failOnMissingWebXml> is set to true的错误
    ssm 出现 Method threw 'org.apache.ibatis.binding.BindingException' exception.Invalid bound statement (not found)……
  • 原文地址:https://www.cnblogs.com/strengthen/p/10610215.html
Copyright © 2011-2022 走看看