31. 数组划分

思路

数组划分
快排的一个Step
方法一:两个指针head & tail, 交替比较直到head 和 tail 重合
方法二:直接求比他小的数字的个数

Python

class Solution:
    """
    @param nums: The integer array you should partition
    @param k: An integer
    @return: The index after partition
    """

    def partitionArray(self, nums, k):
        # write your code here
        nums = [k] + nums
        head, tail = 0, len(nums) - 1
        target = 0
        flag = False
        while head <= tail:
            if not flag:
                if nums[target] > nums[tail]:
                    nums[target], nums[tail] = nums[tail], nums[target]
                    target = tail
                    flag = not flag
                else:
                    tail -= 1
            if flag:
                if nums[target] <= nums[head]:
                    nums[target], nums[head] = nums[head], nums[target]
                    target = head
                    flag = not flag
                else:
                    head += 1
        return target

    def partitionArray2(self, nums, k):
        index = 0
        for num in nums:
            if num < k:
                index += 1
        return index


if __name__ == "__main__":
    s = Solution()
    print(s.partitionArray2([3, 2, 2, 1], 2))
    print(s.partitionArray2([1, 2, 3, 4], 5))
    print(s.partitionArray2([2, 1, 3, 4, 2, 2], 2))
    print(s.partitionArray2([9, 9, 9, 8, 9, 8, 7, 9, 8, 8, 8, 9, 8, 9, 8, 8, 6, 9], 9))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值