周賽296。原本不小心看成子陣列,好險及時發現題目要的是子序列

題目

輸入整數陣列nums和整數k。試將nums分成多個子序列,而使nums中每個數正好出現在其中一個子序列中。
每個子序列中,最大元素與最小元素的差不得超過k,求最少需要幾個幾個子序列。

解法

既然說是子序列,代表順序不重要,可以將nums重新排序。
排序後,盡可能將相連續的數字裝在同一個子序列中。而子序列中第一個元素就是最小值,若當前數字n與最小值差不超過k,則將n加入當前子序列中;否則開啟新的子序列,將n設為第一個元素。

class Solution:
    def partitionArray(self, nums: List[int], k: int) -> int:
        N=len(nums)
        nums.sort()
        ans=1
        first=nums[0]
        for n in nums[1:]:
            if n-first>k:
                ans+=1
                first=n
            
        return ans