例题:
奇偶排序数组(与下标对应) 奇数偶数个数相等
922. 按奇偶排序数组 II
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<int>nums = { 4,2,5,7 };
//指针x指向第一个(代表偶),y指向第二个(代表奇),z最后一个。。 z的指向永远不变
int x = 0, y = 1, z = nums.size() - 1;
int a = 0;
while (x <= z && y <= z) //结束条件是x和y任意一个越界。。比如x越界,代表偶数排好了,那么奇数自然排好
{
//z满足偶数就和x交换,然后x+2(保持下标偶数)
if (nums[z] % 2 == 0)
{
a = nums[x];
nums[x] = nums[z];
nums[z] = a;
x += 2;
}
else //奇数同理
{
a = nums[y];
nums[y] = nums[z];
nums[z] = a;
y += 2;
}
}
for (auto i : nums)
cout << i << " ";
cout << endl;
return 0;
}
寻找重复数(快慢指针,“链表的环“)
287. 寻找重复数
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<int>nums = { 1,3,4,2,2 };
//x慢指针一次跳一步,y快指针一次跳两步
int x = nums[0], y = nums[nums[0]];
//1:一定会在“环”上相遇
while (x != y)
{
x = nums[x];
y = nums[nums[y]];
}
//2:快指针回到开头,然后x和y都一步一跳。。然后再次相遇,就是结果
y = 0;
while (x != y)
{
x = nums[x];
y = nums[y];
}
cout << x;
return 0;
}