922.按奇偶排序数组II
2026/2/14大约 1 分钟
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) {
//核心思路:双指针,一个指向奇数,一个指向偶数,还有一个指针指向末尾;
//末尾是奇数和奇数指针交换位置,偶数和偶数指针交换位置;
//直到有一个指针超过nums长度,说明奇数或者偶数排完了,奇数全部归位那么偶数必然也归位;
int p = nums.length-1;
for(int even = 0,odd = 1;even<=nums.length && odd <= nums.length;){
if((nums[p] & 1) == 1){
swap(nums,odd,p);
odd+=2;
}else{
swap(nums,even,p);
even+=2;
}
}
return nums;
}
public void swap(int[] nums,int i,int j){
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}