922. 按奇偶排序数组 II
题目
给定一个非负整数数组 nums
, nums
中一半整数是 奇数 ,一半整数是 偶数 。
对数组进行排序,以便当 nums[i]
为奇数时,i
也是 奇数 ;当 nums[i]
为偶数时, i
也是 偶数 。
你可以返回 任何满足上述条件的数组作为答案 。
示例 1:
输入:nums = [4,2,5,7]
输出:[4,5,2,7]
解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。
示例 2:
输入:nums = [2,3]
输出:[2,3]
思路
这一题不同点在于需要把奇数位和偶数位分开,并且没法像之前一样用一个指针就代表需要放置的元素位置,所以我们用两个指针分别代表奇数位和偶数位索引,只有当奇数位为偶数和偶数位为奇数时,才进行交换,其余情况下移动指针。
class Solution {
public int[] sortArrayByParityII(int[] nums) {
// i 代表偶数索引,j 代表奇数索引
int i = 0, j = 1;
while (i < nums.length) {
if (nums[i] % 2 == 0) {
i = i + 2;
} else if (nums[j] % 2 == 1) {
j = j + 2;
} else {
int swap = nums[i];
nums[i] = nums[j];
nums[j] = swap;
i = i + 2;
j = j + 2;
}
}
return nums;
}
}