最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

LeetCode 第 15 號(hào)問題:三數(shù)之和

2019-05-04 12:20 作者:吳師兄學(xué)算法  | 我要投稿


題目來(lái)源于 LeetCode 上第 15 號(hào)問題:三數(shù)之和。

題目描述

給定一個(gè)包含 n 個(gè)整數(shù)的數(shù)組 nums,判斷 nums 中是否存在三個(gè)元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重復(fù)的三元組。

題目解析

題目需要我們找出三個(gè)數(shù)且和為 0 ,那么除了三個(gè)數(shù)全是 0 的情況之外,肯定會(huì)有負(fù)數(shù)和正數(shù),所以一開始可以先選擇一個(gè)數(shù),然后再去找另外兩個(gè)數(shù),這樣只要找到兩個(gè)數(shù)且和為第一個(gè)選擇的數(shù)的相反數(shù)就行了。也就是說需要枚舉 a 和 b ,將 c 的存入 map 即可。

需要注意的是返回的結(jié)果中,不能有有重復(fù)的結(jié)果。這樣的代碼時(shí)間復(fù)雜度是 O(n^2)。在這里可以先將原數(shù)組進(jìn)行排序,然后再遍歷排序后的數(shù)組,這樣就可以使用雙指針以線性時(shí)間復(fù)雜度來(lái)遍歷所有滿足題意的兩個(gè)數(shù)組合。

動(dòng)畫描述

待補(bǔ)充

代碼實(shí)現(xiàn)

class?Solution?{
public:
????vector<vector<int>>?threeSum(vector<int>&?nums)?{
????????vector<vector<int>>?res;
????????sort(nums.begin(),?nums.end());
????????if?(nums.empty()?||?nums.back()?<?0?||?nums.front()?>?0)?return?{};
????????for?(int?k?=?0;?k?<?nums.size();?++k)?{
????????????if?(nums[k]?>?0)?break;
????????????if?(k?>?0?&&?nums[k]?==?nums[k?-?1])?continue;
????????????int?target?=?0?-?nums[k];
????????????int?i?=?k?+?1,?j?=?nums.size()?-?1;
????????????while?(i?<?j)?{
????????????????if?(nums[i]?+?nums[j]?==?target)?{
????????????????????res.push_back({nums[k],?nums[i],?nums[j]});
????????????????????while?(i?<?j?&&?nums[i]?==?nums[i?+?1])?++i;
????????????????????while?(i?<?j?&&?nums[j]?==?nums[j?-?1])?--j;
????????????????????++i;?--j;
????????????????}?else?if?(nums[i]?+?nums[j]?<?target)?++i;
????????????????else?--j;
????????????}
????????}
????????return?res;
????}
};


LeetCode 第 15 號(hào)問題:三數(shù)之和的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
延川县| 辽中县| 高台县| 鄄城县| 宁晋县| 志丹县| 鄄城县| 巴彦淖尔市| 福贡县| 惠东县| 建阳市| 茌平县| 崇州市| 忻州市| 邵武市| 锡林郭勒盟| 克什克腾旗| 仪征市| 西乡县| 邯郸县| 唐山市| 虎林市| 朝阳县| 马鞍山市| 广安市| 邮箱| 昂仁县| 万全县| 博乐市| 合江县| 保山市| 平邑县| 繁峙县| 维西| 靖宇县| 介休市| 板桥市| 调兵山市| 读书| 马龙县| 积石山|