侧边栏壁纸
博主头像
GabrielxD

列車は必ず次の駅へ。では舞台は?私たちは?

  • 累计撰写 471 篇文章
  • 累计创建 108 个标签
  • 累计收到 9 条评论

目 录CONTENT

文章目录

【双指针】按奇偶排序数组

GabrielxD
2022-05-08 / 0 评论 / 0 点赞 / 35 阅读 / 276 字 / 正在检测是否收录...

题目

905. 按奇偶排序数组


给你一个整数数组 nums,将 nums 中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。 返回满足此条件的 任一数组 作为答案。

示例 1:

输入:nums = [3,1,2,4]
输出:[2,4,3,1]
解释:[4,2,3,1]、[2,4,1,3] 和 [4,2,1,3] 也会被视作正确答案。

示例 2:

输入:nums = [0]
输出:[0]

提示:

  • 1 <= nums.length <= 5000
  • 0 <= nums[i] <= 5000

解题

方法一:双指针

思路

初始化左右指针,左右指针没有相撞时:

  • 左指针右移直到遇到奇数
  • 右指针左移直到遇到偶数
  • 交换左右指针,左指针右移,右指针左移

循环完成后即排好序。

代码

class Solution {
    public int[] sortArrayByParity(int[] nums) {
        int left = 0, right = nums.length - 1;
        while(left < right) {
            while (left < right && (nums[left] & 1) == 0) {
                left++;
            }
            while (left < right && (nums[right] & 1) == 1) {
                right--;
            }

            int tmp = nums[left];
            nums[left++] = nums[right];
            nums[right--] = tmp;
        }

        return nums;
    }
}
0

评论区