日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

双指针解决数组排序问题

發(fā)布時(shí)間:2025/3/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 双指针解决数组排序问题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這個(gè)問(wèn)題如果注意,用一句就可以解決

sort(nums.begin(),nums.end());

完事。但是人家明確說(shuō)了,不能用代碼庫(kù)中的排序函數(shù)。我們就得自己去實(shí)現(xiàn)排序。其實(shí)這個(gè)問(wèn)題很簡(jiǎn)單,因?yàn)槔锩嬷挥腥N顏色,用0 1 2 表示。思想也很簡(jiǎn)單,就是我們用雙指針遍歷數(shù)組。如果遇到0放在前面,遇到1就在那個(gè)位置,遇到2跳到最后。代碼如下,個(gè)人感覺(jué)用雙指針來(lái)解決數(shù)組的排序問(wèn)題特別好使。

class Solution { public:void sortColors(vector<int>& nums) {int n=nums.size();int tmp=0,i=0;while(i<n){if(nums[i]==0)swap(nums[tmp++],nums[i++]);else if(nums[i]==1)i++;elseswap(nums[i],nums[--n]);}} };

合并區(qū)間也可以用雙指針去解決一個(gè)指針用來(lái)指向當(dāng)前元素,一個(gè)指針指向當(dāng)前元素的下一個(gè)元素。

我們首先利用sort函數(shù)對(duì)數(shù)組進(jìn)行排序,排序之后我們可以更方便的去比較。

?

這個(gè)題我們可以分情況討論。首先最簡(jiǎn)單的情況就是不交叉比如[1,3][4,9]。即n[i][0]>c[i][1]

其中n代表下一個(gè)指針,c代表當(dāng)前指針。這個(gè)時(shí)候直接將當(dāng)前元素[1,3]直接保存即可無(wú)需再比較。只需要拿著[4,9]去和后邊的比較。

第二種情況[4,9][5,8]前面的包含后邊的。用代碼表示即n[i][1]<=c[i][1]這個(gè)時(shí)候不用管[5,8],因?yàn)閇5.8]已經(jīng)包含于[4,9],拿著[4,9]和后邊的數(shù)繼續(xù)進(jìn)行比較。即n++,c不變。

最后一種情況,就是有重疊的情況,[4,9][7,10]這種只需零[4,9]中的9等于10即可用代碼表示,c[i][1]=n[i][1]即可,n=++完事

貼代碼

class Solution { public:vector<vector<int>> merge(vector<vector<int>>& intervals) {if (intervals.size() == 0 || intervals.size() == 1) return intervals;int u = 0, v = 0;vector<vector<int>> ans;// 思路①sort(intervals.begin(), intervals.end());// 思路②while (v < intervals.size()) { if (intervals[v][0] > intervals[u][1]) {ans.emplace_back(intervals[u]);u = v;} else if (intervals[v][1] <= intervals[u][1]) {v++;} else {intervals[u][1] = intervals[v][1];v++;}}//思路③ans.emplace_back(intervals[u]);return ans;} };

?

?

?

總結(jié)

以上是生活随笔為你收集整理的双指针解决数组排序问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。