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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

leetcode15. 三数之和(三指针)

發(fā)布時間:2023/12/4 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode15. 三数之和(三指针) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一:題目

二:思路

1.這里的去重是指的是我們在遍歷元素的時候,遇到相同的挨著的相同的元素的時候要跳過
2.對元素進行排序,為了后面的比較
3.我們用的是三個指針,第一個指針i指向第一個元素,第二個指針left指向第二個元素,第三個指針left指向
的是最后的一個元素.
4.nums[i] + nums[left] + nums[right] > 0, 則right–
nums[i] + nums[left] + nums[right] < 0, 則left++
nums[i] + nums[left] + nums[right] == 0, 則right-- left++ 同時i繼續(xù)往下遍歷

三:上碼

class Solution { public:vector<vector<int>> threeSum(vector<int>& nums) {/**思路:1.這里的去重是指的是我們在遍歷元素的時候,遇到相同的挨著的相同的元素的時候要跳過2.對元素進行排序,為了后面的比較3.我們用的是三個指針,第一個指針i指向第一個元素,第二個指針left指向第二個元素,第三個指針left指向的是最后的一個元素.4.nums[i] + nums[left] + nums[right] > 0, 則right--nums[i] + nums[left] + nums[right] < 0, 則left++nums[i] + nums[left] + nums[right] == 0, 則right-- left++ 同時i繼續(xù)往下遍歷*/vector<vector<int>>ans;vector<int> v;sort(nums.begin(),nums.end());for(int i = 0; i < nums.size(); i++) {if(nums[i] > 0){//如果最小的數都是大于0的,那么就不會有三元組return ans;}//這是對nums[i]的去重處理if(i > 0 && nums[i] == nums[i-1]){continue;}int left = i+1;int right = nums.size()-1;//這是一個nums[i] 跟多個不同的nums[left]和nums[right]進行匹配 while(left < right){if(nums[i] + nums[left] + nums[right] > 0) right--;else if(nums[i] + nums[left] + nums[right] < 0) left++;else{v.push_back(nums[i]);v.push_back(nums[left]);v.push_back(nums[right]);ans.push_back(v);//對nums[left]進行去重while(left < right && nums[left] == nums[left+1]) left++;//對nums[right]進行去重while(left < right && nums[right] == nums[right-1]) right--;//當找到一組合適的答案后left++;right--;v.clear();//為下次裝進合適的答案做準備}}}return ans;} };

總結

以上是生活随笔為你收集整理的leetcode15. 三数之和(三指针)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。