[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 <= A.length <= 10000
0 <= A[i] <= 10000
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 <= A.length <= 10000
0 <= A[i] <= 10000
0 <= K <= 10000
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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了