目錄

問題描述:
實(shí)現(xiàn)代碼:
給你一個整數(shù)數(shù)組?nums,判斷是否存在三元組?[nums[i], nums[j], nums[k]]滿足?i != j、i != k且?j != k,同時還滿足?nums[i] + nums[j] + nums[k] == 0。請
你返回所有和為?0且不重復(fù)的三元組。
注意:答案中不可以包含重復(fù)的三元組。
示例 1:
輸入:nums = [-1,0,1,2,-1,-4]
輸出:[[-1,-1,2],[-1,0,1]]
解釋:
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。
不同的三元組是 [-1,0,1] 和 [-1,-1,2] 。
注意,輸出的順序和三元組的順序并不重要。
示例 2:
輸入:nums = [0,1,1]
輸出:[]
解釋:唯一可能的三元組和不為 0 。
示例 3:
輸入:nums = [0,0,0]
輸出:[[0,0,0]]
解釋:唯一可能的三元組和為 0 。實(shí)現(xiàn)代碼:雙指針法
class Solution {
public:
vector>threeSum(vector& nums)
{
vector>result;//用于返回
sort(nums.begin(),nums.end());//先將其排序
for(int i=0;i0)
{
return result;
}
//對i指針去重
if(i>0&&nums[i]==nums[i-1])
{
continue;
}
int left=i+1;
int right=nums.size()-1;
while(left0) right--;
else if(nums[i]+nums[left]+nums[right]<0) left++;
else
{
result.push_back(vector{nums[i],nums[left],nums[right]});
//left指針去重
while(left 我們先給數(shù)組排序,然后用一個循環(huán)來遍歷數(shù)組,這個遍歷指針i就為第一個指針,然后定義left指針指向i后面一個數(shù),right指針指向數(shù)組中最后一個數(shù)nums.size()-1。
然后就是最重要的去重操作。
首先對于指針i去重:
if(i>0&&nums[i]==nums[i-1])
{
continue;
}當(dāng)指針i指向的數(shù)與其前一個數(shù)相同時,直接continue跳出此次循環(huán),直接進(jìn)行下一次循環(huán)。這里為什么不是與其后一個數(shù)相比而是與前一個數(shù)相比呢,因?yàn)槿绻呛秃笠粋€數(shù)相比,會直接在第一次遇到這個數(shù)的時候就跳出循環(huán),導(dǎo)致指針i指向這個數(shù)的情況沒有記錄到,所以這里要與前一個數(shù)相比。
然后是對于指針left和指針right去重:
//left指針去重
while(left當(dāng)left指向的數(shù)與其后一個數(shù)相同時,向右移動left。
當(dāng)right指向的數(shù)與其前一個數(shù)相同時,想左移動right。
最后left++,right--,使其指向第一個不同的數(shù)。
至于為什么不把這個兩個去重條件一開始就寫在while循環(huán)里呢,原因和上面i指針的一樣,至少要記錄一次然后再判斷,全跳過去不就一次都沒用這個數(shù)了么。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
本文標(biāo)題:Leetcode:15.三數(shù)之和(C++)-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://chinadenli.net/article46/hpoeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站導(dǎo)航、域名注冊、面包屑導(dǎo)航、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容