前言:
现时看官们对“c语言最大值最小差值怎么做”可能比较关心,你们都想要了解一些“c语言最大值最小差值怎么做”的相关知识。那么小编也在网摘上收集了一些有关“c语言最大值最小差值怎么做””的相关资讯,希望咱们能喜欢,朋友们快快来了解一下吧!题目
给你一个整数数组 A,对于每个整数 A[i],可以选择 x = -K 或是 x = K (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、遍历;时间复杂度O(nlog(n)),空间复杂度O(1)
func smallestRangeII(A []int, K int) int { sort.Ints(A) n := len(A) res := A[n-1] - A[0] // 排序后,为了最小差值,必定是A[0,i]+K,A[i+1:]-K // 最小值落在A[0]+K,A[i+1]-K之中 // 最大值落在A[n-1]-K,A[i]+K之中 for i := 0; i < n-1; i++ { minValue := min(A[0]+K, A[i+1]-K) maxValue := max(A[n-1]-K, A[i]+K) res = min(maxValue-minValue, res) } return res}func min(a, b int) int { if a > b { return b } return a}func max(a, b int) int { if a > b { return a } return b}总结
Medium题目,排序后,为了最小差值,在一个位置i,对于前一段有A[0,i]+K, 后一段有A[i+1:]-K;
其中最小值落在A[0]+K,A[i+1]-K之中;
其中最大值落在A[n-1]-K,A[i]+K之中;
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #c语言最大值最小差值怎么做