Partition Array by Odd and Even详解编程语言

Partition an integers array into odd number first and even number second. 
 
Example 
Given [1, 2, 3, 4], return [1, 3, 2, 4] 
 
Challenge 
Do it in-place.

将数组中的奇数和偶数分开,使用『两根指针』的方法最为自然,奇数在前,偶数在后,若不然则交换之。

JAVA:

public class Solution { 
    /** 
     * @param nums: an array of integers 
     * @return: nothing 
     */ 
    public void partitionArray(int[] nums) { 
        if (nums == null) return; 
 
        int left = 0, right = nums.length - 1; 
        while (left < right) { 
            // odd number 
            while (left < right && nums[left] % 2 != 0) { 
                left++; 
            } 
            // even number 
            while (left < right && nums[right] % 2 == 0) { 
                right--; 
            } 
            // swap 
            if (left < right) { 
                int temp = nums[left]; 
                nums[left] = nums[right]; 
                nums[right] = temp; 
            } 
        } 
    } 
}

源码分析

注意处理好边界即循环时保证left < right.

复杂度分析

遍历一次数组,时间复杂度为 O(n), 使用了两根指针,空间复杂度 O(1).

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/20722.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论