Leetcode908思路

为什么写这篇文章?

相信不少人在看官方的leetcode题解的时候,都遇到了不少困难。leetcode官方的题解,省略了不少细节。导致在读的时候非常难懂。所以,我在这里写出我对官方答案的理解和解读。希望可以帮助大家更好的理解官方的题解。

题目链接

leetcode908-最小差值

自己的解读

官方给出了两种情况,下面我们对这两种情况分别进行讨论:

  • \(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\)

posted @ 2022-10-27 19:33  Lacio  阅读(33)  评论(0)    收藏  举报