zoukankan      html  css  js  c++  java
  • Easy | 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 | 快排(双指针)

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

    输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。

    示例:

    输入:nums = [1,2,3,4]
    输出:[1,3,2,4] 
    注:[3,1,2,4] 也是正确的答案之一。
    

    解题思路

    public int[] exchange(int[] nums) {
        int left = 0, right = nums.length - 1;
        while (left < right) {
            // 找到左边的第一个偶数
            while ((nums[left] & 0x01) == 1 && left < right) {
                left++;
            }
            // 找到右边的第一个奇数
            while ((nums[right] & 0x01) == 0 && left < right) {
                right--;
            }
            // 将左右两边的奇偶数交换
            if (left < right) {
                swap(nums, left, right);
            }
        }
        return nums;
    }
    
    public void swap(int[] nums, int index1, int index2) {
        int temp = nums[index1];
        nums[index1] = nums[index2];
        nums[index2] = temp;
    }
    

    上面是一种首尾双指针的写法

    下面是一种快慢双指针的写法

    public int[] exchange(int[] nums) {
        int low = 0, fast = 0;
        while (fast < nums.length) {
            if ((nums[fast] & 0x1) == 1) {
                swap(nums, low, fast);
                low++;
            }
            fast++;
        }
        return nums;
    }
    
  • 相关阅读:
    【PAT甲级】1054 The Dominant Color
    【PAT甲级】1001 A+B Format
    【算法】二分排序和二分查找
    【PAT甲级】1008 Elevator (20分)
    移动端工作准备
    媒体查询
    多列布局
    怪异盒模型
    弹性盒
    圆角
  • 原文地址:https://www.cnblogs.com/chenrj97/p/14289300.html
Copyright © 2011-2022 走看看