😊博主目前也在学习,有错误欢迎指正😊
🌈保持热爱 奔赴星海🌈
文章目录
- 一、题目
- 1、题目描述
- 2、基础框架
- 3、原题链接
- 二、解题报告
- 1、思路分析
- 2、代码详解
- 三、本题知识
一、题目
1、题目描述
给定一个非负整数数组 nums, nums 中一半整数是 奇数 ,一半整数是 偶数 。
对数组进行排序,以便当 nums[i] 为奇数时,i 也是 奇数 ;当 nums[i] 为偶数时, i 也是 偶数 。
你可以返回 任何满足上述条件的数组作为答案 。
2、基础框架
- c++版本框架代码如下:
class Solution {
public:
vector<int> sortArrayByParityII(vector<int>& nums) {
}
};
3、原题链接
链接
二、解题报告
1、思路分析
(1)借鉴快排的思路,把数组中的元素分为偶数和奇数两个部分,偶数放在左边,奇数放在右边。
(2)再次利用类似方法,把数组中的元素放到指定位置。
2、代码详解
class Solution {
public:
vector<int> sortArrayByParityII(vector<int>& nums) {
int n = nums.size();
int l = 0;
int r = n - 1;
while(l < r) {
while(l < r && nums[l]%2 == 0) l++;
while(l < r && nums[r]%2 == 1) r--;
swap(nums,l,r);
}
l = 0,r = n - 1;
while(l < r) {
while(l < r && l%2 == 0 && nums[l]%2 == 0) l++;
while(l < r && r%2 == 1 && nums[r]%2 == 1) r--;
swap(nums,l,r);
l++;
r--;
}
return nums;
}
void swap(vector<int>& nums,int l,int r) {
int t = nums[l];
nums[l] = nums[r];
nums[r] = t;
}
};
//
三、本题知识
双指针