1. 兩數(shù)之和

題目鏈接:

1. 兩數(shù)之和

題目描述:

給定一個(gè)整數(shù)數(shù)組 nums 和一個(gè)目標(biāo)值 target栓票,請(qǐng)你在該數(shù)組中找出和為目標(biāo)值的那 兩個(gè) 整數(shù)伐谈,并返回他們的數(shù)組下標(biāo)抵恋。

你可以假設(shè)每種輸入只會(huì)對(duì)應(yīng)一個(gè)答案。但是外驱,你不能重復(fù)利用這個(gè)數(shù)組中同樣的元素育灸。

示例:

給定 nums = [2, 7, 11, 15], target = 9
因?yàn)?nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

算法:

  1. 題目非常簡(jiǎn)單。要在數(shù)組中找到兩個(gè)整數(shù)之和為target昵宇,那么只需要把數(shù)組雙層遍歷一遍磅崭,找出所有可能的組合即可。由于每種輸入只會(huì)對(duì)應(yīng)一個(gè)答案瓦哎,因此找到之后就可以直接輸出砸喻。對(duì)應(yīng)的時(shí)間復(fù)雜度是o(n^2),空間復(fù)雜度是o(1)蒋譬。

  2. 但是割岛,o(n^2)的復(fù)雜度顯然是比較高的》钢考慮到癣漆,對(duì)于數(shù)組的第k個(gè)元素,nums[k]剂买,我們只需要找到對(duì)應(yīng)的target - nums[k]即可惠爽。可以考慮先將其進(jìn)行排序瞬哼,然后尋找元素婚肆。用快排的速度為O(nlogn),然后用二分查找的速度也為O(nlogn)坐慰,因此時(shí)間復(fù)雜度為O(nlogn)较性。我們還需要用一個(gè)hash表來保存元素的下標(biāo),因此空間復(fù)雜度為O(n)结胀。
    當(dāng)然對(duì)于有序的列表來說赞咙,可以用首尾遞進(jìn)進(jìn)行查找。先取nums[0] 和 nums[n - 1]糟港,如果它們相加大于k人弓,則將取nums[0] 與 nums[n - 2];如果小于k着逐,則取nums[1] 和 nums[n - 1]再進(jìn)行比較。這樣只需要遍歷一遍數(shù)組意蛀,時(shí)間復(fù)雜度為O(n)耸别。加上前面的排序,總的時(shí)間復(fù)雜度仍然為O(nlogn)县钥。

  3. 前面的算法建立了一個(gè)hash表來儲(chǔ)存下標(biāo)秀姐。事實(shí)上,我們可以用儲(chǔ)存的下標(biāo)來表示該數(shù)有沒有出現(xiàn)過若贮,并且在每次存入一個(gè)數(shù)的時(shí)候省有,判斷target - nums[k]是否出現(xiàn)過痒留。如果出現(xiàn),直接輸出二者下標(biāo)即可蠢沿。這樣伸头,時(shí)間復(fù)雜度為O(n),空間復(fù)雜度為O(n)

代碼:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        for (int i = 0; i < nums.size(); ++i) {
            for (int j = i + 1; j < nums.size(); ++j) {
                if (nums[i] + nums[j] == target)
                    return {i, j};
            }
        }
        return {};
    }
};
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        map <int, int> label;
        for (int i = 0; i < nums.size(); ++i) {
            // Some values can be same. For instance, { [3, 3], 6 }
            // if we assign value without judge, the result will be (1, 1)
            if (label.count(nums[i]) && 2 * nums[i] == target)
                return { label[nums[i]], i };
            else
                label[nums[i]] = i;
        }

        sort(nums.begin(), nums.end());
        int head = 0, tail = nums.size() - 1;
        while (head < tail) {
            if (nums[head] + nums[tail] == target)
                return { label[nums[head]], label[nums[tail]] };
            if (nums[head] + nums[tail] < target)
                head++;
            if (nums[head] + nums[tail] > target)
                tail--;
        }
        return {};
    }
};
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        map <int, int> label;
        for (int i = 0; i < nums.size(); ++i) {
            // The number we found can't be itself. 
            // For example, { [3, 2, 4]舷蟀,6} 恤磷。Of course 3+3 is the result, but it's wrong. 
            if (label.count(target - nums[i]) && label[target - nums[i]] != i)
                return { label[target - nums[i]], i };
            // We should assign value after judge it. 
            // For example, { [3, 3],6 }, if we assign value before judge, we will get nothing. 
            label[nums[i]] = i;
        }
        return {};
    }
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末野宜,一起剝皮案震驚了整個(gè)濱河市扫步,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌匈子,老刑警劉巖河胎,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異虎敦,居然都是意外死亡游岳,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門原茅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吭历,“玉大人,你說我怎么就攤上這事擂橘∩吻” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵通贞,是天一觀的道長(zhǎng)朗若。 經(jīng)常有香客問我,道長(zhǎng)昌罩,這世上最難降的妖魔是什么哭懈? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮茎用,結(jié)果婚禮上遣总,老公的妹妹穿的比我還像新娘。我一直安慰自己轨功,他們只是感情好旭斥,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著古涧,像睡著了一般垂券。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上羡滑,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天菇爪,我揣著相機(jī)與錄音算芯,去河邊找鬼。 笑死凳宙,一個(gè)胖子當(dāng)著我的面吹牛熙揍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播近速,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼诈嘿,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了削葱?” 一聲冷哼從身側(cè)響起奖亚,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎析砸,沒想到半個(gè)月后昔字,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡首繁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年作郭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弦疮。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡夹攒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出胁塞,到底是詐尸還是另有隱情咏尝,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布啸罢,位于F島的核電站编检,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏扰才。R本人自食惡果不足惜允懂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望衩匣。 院中可真熱鬧蕾总,春花似錦、人聲如沸琅捏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽午绳。三九已至,卻和暖如春映之,著一層夾襖步出監(jiān)牢的瞬間拦焚,已是汗流浹背蜡坊。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赎败,地道東北人秕衙。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像僵刮,于是被迫代替她去往敵國(guó)和親据忘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • 1.兩數(shù)之和 給定一個(gè)整數(shù)數(shù)組和一個(gè)目標(biāo)值搞糕,找出數(shù)組中和為目標(biāo)值的兩個(gè)數(shù)勇吊。你可以假設(shè)每個(gè)輸入只對(duì)應(yīng)一種答案,且同樣...
    Gunther17閱讀 1,010評(píng)論 2 6
  • 題目: 題目地址:https://leetcode-cn.com/problems/two-sum/ 問題描述: ...
    MrGeekr極氪閱讀 595評(píng)論 0 0
  • 兩數(shù)之和(two-sum) 這是LeetCode上一道十分經(jīng)典的題目窍仰,存在多種解法汉规,難度是簡(jiǎn)單,但后面難度更高的三...
    ZenMoto閱讀 502評(píng)論 0 0
  • 題目:?給定一個(gè)整數(shù)數(shù)組 nums和一個(gè)目標(biāo)值 target驹吮,請(qǐng)你在該數(shù)組中找出和為目標(biāo)值的那 兩個(gè) 整數(shù)针史,并返回...
    12313凱皇閱讀 518評(píng)論 0 0
  • 很久之前就想練算法,看過書也就懂個(gè)大概碟狞,學(xué)而不練是為無用啄枕,今天開始每天的力扣打卡!(一周爭(zhēng)取3-4題吧...視情況...
    狩秋之人閱讀 305評(píng)論 0 0