Partition Array by Odd and Even

Partition an integers array into odd number first and even number second.

剑指offer的一道题,把所有奇数移动到偶数前面,其实是partition的双端解法,利用双指针。先检测两边合格的元素,都不合格,则交换,继续。

需要注意的是:

1.移动时,防止全部是偶数或者全部是奇数的情况,防止移动时越界。

2.交换时,仍然需要防止越界,全奇数或者全偶数,则left== right, 此时不应该交换。

3.注意判断奇偶时,利用位运算 &0x1(python 1)也可以。可以加速。

代码如下:

class Solution:
    # @param nums: a list of integers
    # @return: nothing
    def partitionArray(self, nums):
        if not nums or len(nums) == 1:
            return 
        left = 0
        right = len(nums) - 1
        while left < right:
            while left < right and nums[left] & 0x1 == 1:
                left += 1
            while left < right and nums[right] & 0x1 == 0:
                right -=1
            if left < right:
                nums[left],nums[right] = nums[right],nums[left]
                left += 1
                right -= 1
        
        return 

 

posted on 2016-08-07 11:03  Sheryl Wang  阅读(191)  评论(0编辑  收藏  举报

导航