leetcode算法刷題——兩數(shù)之和
難度系數(shù):簡(jiǎn)單
題目描述:
給定一個(gè)整數(shù)數(shù)組 nums 和一個(gè)整數(shù)目標(biāo)值 target,請(qǐng)你在該數(shù)組中找出和為目標(biāo)值 target? 的那兩個(gè)整數(shù),并返回它們的數(shù)組下標(biāo)。
你可以假設(shè)每種輸入只會(huì)對(duì)應(yīng)一個(gè)答案。但是,數(shù)組中同一個(gè)元素在答案里不能重復(fù)出現(xiàn)。
你可以按任意順序返回答案。
示例:
輸入:nums = [2,7,11,15], target = 9
輸出:[0,1]
方法一 (普通):
時(shí)間復(fù)雜度:O(n^2)
解題思路:
在數(shù)組nums中,找兩個(gè)數(shù)和為target,并返回索引位置,首先遍歷數(shù)組,取數(shù)組中每一個(gè)數(shù)a,接著再在當(dāng)前數(shù)a后面一個(gè)數(shù)開(kāi)始遍歷到末尾,取數(shù)b,每次判定a+b是否等于target,若等于,則返回這兩個(gè)數(shù)的索引,否則則繼續(xù)重復(fù)這個(gè)過(guò)程。
代碼實(shí)現(xiàn)(C++):
方法二(更快):
時(shí)間復(fù)雜度:O(n)
解題思路:
首先定義一個(gè)結(jié)構(gòu)體,結(jié)構(gòu)體由一個(gè)整型數(shù)count和一個(gè)整型數(shù)index組成,利用桶排序的思想,定義該結(jié)構(gòu)體數(shù)組,將其作為桶,長(zhǎng)度為數(shù)組nums中最大減去最小加一,遍歷nums數(shù)組,將每一項(xiàng)減去最小值,將其作為索引修改對(duì)應(yīng)結(jié)構(gòu)體中的那一項(xiàng),將其count加1,index記錄為當(dāng)前nums數(shù)組的索引位置,最后遍歷結(jié)構(gòu)體數(shù)組,將target減去每一項(xiàng)索引所對(duì)應(yīng)的nums數(shù)組值,在結(jié)構(gòu)體數(shù)組中去找該值是否存在,若存在,則記錄下兩數(shù)的索引。
代碼實(shí)現(xiàn)(C++):
最后,如果有更好的方法或者有一些建議,請(qǐng)?jiān)谠u(píng)論區(qū)多多留言,感謝觀看~~。