按奇偶排序数组I-II
【摘要】 905. 按奇偶排序数组https://leetcode.cn/problems/sort-array-by-parity/方法:首尾指针left和right, 最初:left指向最左,right指向最右left不断往右走:要防止越界(left<right),找奇数right不断往左走:要防止越界(left<right),找偶数找到之后,交换left和right位置的元素nums[left...
905. 按奇偶排序数组
方法:首尾指针left和right, 最初:left指向最左,right指向最右
- left不断往右走:要防止越界(left<right),找奇数
- right不断往左走:要防止越界(left<right),找偶数
- 找到之后,交换left和right位置的元素
nums[left]&1 == 0 ->err ==的优先级比&高
class Solution {
public:
vector<int> sortArrayByParity(vector<int>& nums) {
int left = 0;
int right = nums.size()-1;
//当left和right指同一个数不处理!
while(left <right)
{
//左指针找奇数
while(left < right && (nums[left]&1) == 0)
{
left++;
}
//右指针找偶数
while(left < right && (nums[right]&1) !=0)
{
right--;
}
//交换的时候要防止越界!因为上面跳出来可能是越界跳出来的
if(left < right)
{
swap(nums[left],nums[right]);
//交换之后,left和right往后/往前走,否则会导致死循环
left++;
right--;
//简写:
//swap(nums[left++],nums[right--])
}
}
return nums;
}
};
922. 按奇偶排序数组 II
方法1:准备一个临时数组,遍历两次原数组,第一次把奇数拷贝到临时数组的奇数位 第二次把偶数拷贝到临时数组的偶数位
class Solution {
public:
vector<int> sortArrayByParityII(vector<int>& nums) {
int n = nums.size();
vector<int> ans;
ans.resize(n,0);//记得开辟同样大小的空间!!!初始化为0
int i = 0;
//遍历放偶数到ans[0],ans[2]...位置
for(auto x:nums)
{
//偶数
if(x%2 == 0) // x&1 == 0
{
ans[i] = x;
i+=2;//放到偶数位上
}
}
//再次遍历放奇数
i= 1;
for(auto x:nums)
{
//奇数
if(x%2 != 0)
{
ans[i] = x;
i+=2;//放到奇数位上
}
}
return ans;
}
};
方法2:双指针 在偶数位上找奇数,在奇数位上找偶数,找到后将它们交换即可
- 注意优先级的问题!!!
nums[i]&1 == 0 ->err ==的优先级比&高
class Solution {
public:
vector<int> sortArrayByParityII(vector<int>& nums) {
//前后指针
//i:初始化为0,在偶数位上找奇数
//j:初始化为1,在奇数位上找偶数
//找到之后,停下来,然后交换二者的值
int i = 0;
int j = 1;
while(i<nums.size() && j<nums.size())
{
//i在偶数位上找奇数
while(i<nums.size() && (nums[i]&1) == 0)
{
i+=2;
}
//j在奇数位上找偶数
while(j<nums.size()&&(nums[j]&1) != 0)
{
j+=2;
}
//来到这里,就交换此时二者指向的值,注意要防止越界!
if(i<nums.size() && j<nums.size())
{
swap(nums[i],nums[j]);
}
//交换完之后,二者都要往后走到下一个奇数位/偶数位
//否则就会导致死循环
i+=2;
j+=2;
}
return nums;
}
};
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)