龙空技术网

leetcode910_go_最小差值II

每天都AC 83

前言:

现时看官们对“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语言最大值最小差值怎么做