partition与荷兰国旗问题

    科技2022-08-15  98

    partition问题:

    partition问题是快速排序重要的一环,其仅要求将小于等于部分移动到pivot左边,大于的部分移动到pivot右边,

    基本思想是:

    设置小于等于区域,然后从low遍历到high,当遍历的值小于等于pivot,则将小于等于区域增1,然后和遍历值交换。

    def partition(nums, low, high): i = low - 1 pivot = nums[high] for j in range(low, high+1): if nums[j] <= pivot: i += 1 nums[i], nums[j] = nums[j], nums[i] return i

    荷兰国旗问题:

    与partition问题不同的是,荷兰国旗问题额外要求等于基准值的都处于中间位置,所以相对于partition问题,荷兰国旗问题需要同时设置一个小于区域和一个大于区域,当遍历指针i在大于区域左侧时遍历,若遍历到的数小于pivot,则小于区域增1交换然后遍历指针增1,若相等,则什么也不干,增1,若大于,则大于区域减1,交换,此时i不增。

    class Solution: def sortColors(self, nums: List[int]) -> None: """ Do not return anything, modify nums in-place instead. """ len_nums = len(nums) low = -1 high = len_nums h = 0 while h < high: if nums[h] < 1: low += 1 nums[low], nums[h] = nums[h], nums[low] h += 1 elif nums[h] == 1: h += 1 else: high -= 1 nums[h], nums[high] = nums[high], nums[h]

     

    Processed: 0.011, SQL: 8