【刷leetcode】12.调整数组顺序使奇数位于偶数前面

题目描述

在这里插入图片描述

思路

可以设置两个指针,分别从数组的两端开始遍历。前指针专门找偶数,后指针专门找奇数。当前指针指向偶数,后指针指向奇数的时候,交换它们的位置。

代码

class Solution {
    
    
    public int[] exchange(int[] nums) {
    
    
        //1.设置两个指针,分别从数组的头尾开始遍历
        //1.1前指针专门负责找偶数
        int i = 0;
        //1.2后指针专门负责找奇数
        int j = nums.length - 1;

        //2.开始遍历:只要前指针小于后指针,遍历继续进行
        while(i < j){
    
    
            //如果前指针指向的数不是偶数,前指针向后移动
            if((nums[i] % 2) != 0){
    
    
                i++;
                continue;
            }
            //如果后指针指向的数不是寄数,后指针向前移动
            if((nums[j] % 2) != 1){
    
    
                j--;
                continue;
            }
            //前指针指向偶数,后指针指向奇数,就把前后指针指向的数进行交换
            int temp = nums[i];
            nums[i] = nums[j];
            nums[j] = temp;
        }

        //3.结束循环,返回数组
        return nums;
    }

}

复杂度分析

时间复杂度:O(n) 遍历数组
空间复杂度:O(1) 新设置的两个指针都只使用了常数大小的额外空间

猜你喜欢

转载自blog.csdn.net/taroriceball/article/details/111468907