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

120 阅读1分钟

思路

  • 双指针,收尾靠拢。
  • 注意ij相遇边界处理

class Solution {
    public int[] exchange(int[] nums) {
        int i = 0, j = nums.length - 1;
        while (i < j) {
            //i < j防止这样的情况:i当前是奇数,j也是奇数,不加这个条件i就会越过j,swap已经处理过的元素
            // 也可以防止全奇数
            while (i < j && nums[i] % 2 == 1 ) {//最终结束条件为i=j,此时swap自己,无影响
                i++;
            }
            while (i < j && nums[j] % 2 == 0) {//最终结束条件为i=j,此时swap自己,无影响
                j--;
            }
            int tmp = nums[i];
            nums[i] = nums[j];
            nums[j] = tmp;
        }
        return nums;
    }
}