为什么写这篇文章?
相信不少人在看官方的leetcode题解的时候,都遇到了不少困难。leetcode官方的题解,省略了不少细节。导致在读的时候非常难懂。所以,我在这里写出我对官方答案的理解和解读。希望可以帮助大家更好的理解官方的题解。
题目链接
自己的解读
官方给出了两种情况,下面我们对这两种情况分别进行讨论:
- \(maxNum - minNum <= 2k\)。那么可以将数组中所有的数改成相同的数,所以最后更改后数组的最大值和最小值是0。
在nums当中,除了了\(minNum\)和\(maxNum\),其他的数字一定介于两者之间,这是毋庸置疑的。而maxNum和minNum之间的差值不超过2k。而介于之间的数字也一定满足\(x - minNum <= k\)并且\(maxNum - x <= k\)。为什么呢?因为\(maxNum - minNUm <= 2k\)。也就是说\(minNum\)和\(maxNum\)可以通过+k和-k来相互转换。所以,两个相隔最远的数字都可以通过k相互转换的,那么中间的数也肯定是可以的。 所以,数组中的所有的数都可以变成相同的数字。
- 如果\(maxNum - minNum > 2k\),那么更改后的数字的最低分数是\(maxNum - minNum - 2k\)。
\(maxNum\)和\(minNum\)的最小差值为\(maxNum - k - (minNum + k)\)。
1)更改后的数组的最低分数一定大于等于这个差值。
原因如下:
- 如果更改后的数组,\(maxNum+k\)和\(minNum-k\)依然是为最大值和最小值,那么差值就是结果了。
- 如果更改后的数组,\(maxNum+k\)和\(minNum-k\)其中一个不是最大值或者最小值,那么结果一定会被这个大。因为最大值和最小值的距离比他们的差值更远。
所以,更改后的数组的最低分数一定大于等于\(maxNum - k - (minNum + k)\)。
2)更改后的数组的最低分数一定小于等于这个差值。
原因如下:
- 如果说原来的数组的\(minNum\),进行更改后为\(minNum+k\),并且这个数字大于原来数组中的\(x\),那么\(x\)一定可以通过k变成\(minNum+k\)。
- 如果说原来的数组的\(maxNum\),进行更改后为\(maxNum-k\),并且这个数字小于原来数组中的\(x\),那么\(x\)一定可以通过k变成\(maxNum-k\)。
也就是说,原来数字的中的数字都可以区间\([minNum+k, maxNum-k]\)之间的整数。所以,更改后的最低分数一定小于等于这个差值。
既大于有小于,那么最低分数就是这个差值。
因此,当\(maxNum - minNum > 2k\)的时候,最低分数就是\(maxNum-minNum-2K\)。
标签:分数,maxNum,更改,minNum,差值,Leetcode908,数组,思路 From: https://www.cnblogs.com/Thinkingbokeyuan/p/16831909.html