双指针解决数组排序问题
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                双指针解决数组排序问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                這個問題如果注意,用一句就可以解決
sort(nums.begin(),nums.end());完事。但是人家明確說了,不能用代碼庫中的排序函數。我們就得自己去實現排序。其實這個問題很簡單,因為里面只有三種顏色,用0 1 2 表示。思想也很簡單,就是我們用雙指針遍歷數組。如果遇到0放在前面,遇到1就在那個位置,遇到2跳到最后。代碼如下,個人感覺用雙指針來解決數組的排序問題特別好使。
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]);}} };合并區間也可以用雙指針去解決一個指針用來指向當前元素,一個指針指向當前元素的下一個元素。
我們首先利用sort函數對數組進行排序,排序之后我們可以更方便的去比較。
?
這個題我們可以分情況討論。首先最簡單的情況就是不交叉比如[1,3][4,9]。即n[i][0]>c[i][1]
其中n代表下一個指針,c代表當前指針。這個時候直接將當前元素[1,3]直接保存即可無需再比較。只需要拿著[4,9]去和后邊的比較。
第二種情況[4,9][5,8]前面的包含后邊的。用代碼表示即n[i][1]<=c[i][1]這個時候不用管[5,8],因為[5.8]已經包含于[4,9],拿著[4,9]和后邊的數繼續進行比較。即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;} };?
?
?
總結
以上是生活随笔為你收集整理的双指针解决数组排序问题的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 车机app
- 下一篇: mysql data too large
