例題:
奇偶排序數組(與下標對應)? 奇數偶數個數相等
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;
}