一、题目
1、题目描述
给定一个非负整数数组 nums, nums 中一半整数是 奇数 ,一半整数是 偶数 。
对数组进行排序,以便当 nums[i] 为奇数时,i 也是 奇数 ;当 nums[i] 为偶数时, i 也是 偶数 。
你可以返回 任何满足上述条件的数组作为答案 。
2、基础框架
- C++版本给出的基础框架如下:
3、原题链接
https://leetcode.cn/problems/sort-array-by-parity-ii/
二、解题报告
1、思路分析
(
1
)
(1)
(1)设置奇偶指针,初始值分别为1,0。
(
2
)
(2)
(2)分别找到值与下标奇偶性不对应的位置,两指针值互换
2、时间复杂度
时间复杂度为O(N)
3、代码详解
class Solution {
public:
vector<int> sortArrayByParityII(vector<int>& nums) {
int p0 = 0;
int p1 = 1;
while(p0 < nums.size() && p1 < nums.size()) {
while(p0 < nums.size() && nums[p0]%2 == 0) {
p0 += 2;
}
while(p1 < nums.size() && nums[p1]%2 == 1) {
p1 += 2;
}
if (p0 < nums.size() && p1 < nums.size()) {
swap(nums[p0], nums[p1]);
}
}
return nums;
}
};