项目场景:
给你一个整数数组 nums
和一个整数 k
。你可以将 nums
划分成一个或多个 子序列 ,使 nums
中的每个元素都 恰好 出现在一个子序列中。
在满足每个子序列中最大值和最小值之间的差值最多为 k
的前提下,返回需要划分的 最少 子序列数目。
子序列 本质是一个序列,可以通过删除另一个序列中的某些元素(或者不删除)但不改变剩下元素的顺序得到。
提示:
1 <= nums.length <= 105
0 <= nums[i] <= 105
0 <= k <= 105
问题描述
根据题意,这题要保证子序列的最大值和最小值的最大差值为K,那子序列中元素顺序对结果不会有影响,为了方便,我们对数组进行排序。对排序后的数组进行遍历,如果x-mn>k说明此时序列的最大值-最小值>k了,不满足要求,需要将此时的x放到新的子序列里,ans加1。因为num是经过排序的,则此时新序列的最小值mn被设置为x,之后持续循环即可。
class Solution:def partitionArray(self, nums: List[int], k: int) -> int:nums.sort()##数组排序ans=0mn=-inf##初始值设为无穷小for x in nums:if x-mn>k:ans+=1##子序列数量加1mn=xreturn ans
以上为本篇文章的全部内容,感谢你抽出宝贵的时间阅读这篇文章。如果你有任何疑问或建议,欢迎在评论区留言,我们一起交流进步。愿你的代码之路越走越顺,生活充满阳光!