【题解】剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

78 阅读1分钟

题目

1663168642328.png

难度

力扣难度简单,实际难度简单

分类

双指针

思路

这道题最差的情况也就是新建一个数组然后从头遍历到尾,奇数塞前面,偶数从后面塞入。时间复杂度n,空间复杂度n 时间复杂度为n是没办法优化的,无论如何必须把这n个数全看完,那么就从空间复杂度入手,那就是复杂度为1,使用原数组原地交换,那么也很简单头尾各一个指针往中间遍历,遇到左偶右奇就交换一下,不然就移动就好了。 还有一个优化的点就是判断是奇数还是偶数可以用 & 1 位运算去写,会比%2快一些,没办法这道题太简单了,基本都会写吧只能扣细节。

代码

class Solution {
    public int[] exchange(int[] nums) {
        if (nums.length == 1 || nums.length == 0) {
            return nums;
        }
        int indexL = 0,indexR = nums.length - 1;
        while (indexL < indexR) {
            boolean flag1 = (nums[indexL] & 1) == 0;
            boolean flag2 = (nums[indexR] & 1) == 1;
            if (flag1 && flag2) {
                int temp = nums[indexL];
                nums[indexL] = nums[indexR];
                nums[indexR] = temp;
                indexR--;
                indexL++;
            } else if (!flag1 && !flag2){
                indexR--;
                indexL++;
            } else if (flag1) {
                indexR--;
            } else if (flag2) {
                indexL++;
            }
        }
        return nums;
    }
}