每日一题-20240128

题目描述

922. 按奇偶排序数组 II

给定一个非负整数数组 numsnums 中一半整数是 奇数 ,一半整数是 偶数

对数组进行排序,以便当 nums[i] 为奇数时,i 也是 奇数 ;当 nums[i] 为偶数时, i 也是 偶数

你可以返回 任何满足上述条件的数组作为答案

示例 1:

1
2
3
输入:nums = [4,2,5,7]
输出:[4,5,2,7]
解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。

示例 2:

1
2
输入:nums = [2,3]
输出:[2,3]

提示:

  • 2 <= nums.length <= 2 * 104
  • nums.length 是偶数
  • nums 中一半是偶数
  • 0 <= nums[i] <= 1000

进阶:可以不使用额外空间解决问题吗?

解题思路

定义两个指针ij,分别记录偶数和奇数对应位置的元素,每次各加2,并把奇偶排序后的结果存在新数组中。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Solution922 {
public static int[] sortArrayByParityII(int[] nums) {
int[] result = new int[nums.length];
int i = 0, j = 1;
for (int num : nums) {
if (num % 2 == 0) {
result[i] = num;
i += 2;
} else {
result[j] = num;
j += 2;
}
}
return result;
}

public static void main(String[] args) {
int[] num = {4,2,5,7};
int[] array = sortArrayByParityII(num);
for (int i : array) {
System.err.println(i);
}
}
}