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

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

这里可以考虑比较暴力的方式,先遍历一趟原数组nums,将奇偶数分开存储,再先遍历奇数列表,再遍历偶数列表,就可以保证奇偶数都按照顺序存储了。

class Solution {
    public int[] exchange(int[] nums) {
        int[] ans = new int[nums.length];
        List<Integer> oddList = new ArrayList<>();
        List<Integer> evenList = new ArrayList<>();
        for(var num : nums) {
            if(num % 2 == 1) {
                oddList.add(num);
            } else {
                evenList.add(num);
            }
        }
        int idx = 0;
        for(var num : oddList) {
            ans[idx++] = num;
        }
        for(var num : evenList) {
            ans[idx++] = num;
        }
        return ans;
    }
}
```java
缺点是需要遍历多次,代码上并不是很简洁,并且使用了新空间,这里可以考虑使用双指针优化至O(n)的空间。
双指针方式就需要设置两个不同的指针分别去找到奇数和偶数,并且将其交换。
l指针设置在数组头部开始遍历,遇到奇数遍使左指针继续右移,遇到偶数停止,j指针设置在数组尾部开始遍历,遇到偶数使右指针继续左移,直到遇到奇数停止,此时,交换两个指针所指向的数值。

class Solution {
public int[] exchange(int[] nums) {
int n = nums.length, l = 0, r = n - 1;
while(l < r) {
while(l < r && nums[l] % 2 == 1) {
l++;
}
while(l < r && nums[r] % 2 == 0) {
r--;
}
int temp = nums[l];
nums[l] = nums[r];
nums[r] = temp;
}
return nums;
}
}

posted @   NullPointer_C  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示