題目如下
兩數之和
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。
你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。
示例:
給定 nums =[2
,7,11
,15], target =
9因為 nums[0]
+ nums[1]
=2+7
=9所以返回 [0,
1]
筆者第一反應想是這還不簡單,寫兩個迴圈,兩數之和等於target就完事了,一頓操作,目的是達到了,但是效率確差強人意。
那麼如何更好地求解呢,這時就要從唯一值來入手了,在php中,陣列的value不是唯一的,但是key確實唯一的,那麼我們是否可以通過翻轉這個資料,使用key的唯一性來求解呢,說做就做,一頓操作,**如下:
class
solution
$res
[$value]=
$key
;//不存在,將value作為下標key存入res陣列}}
}$a=new
solution()
;$a->
twosum([
2,7,
11,15]
,9);
可能有的小夥伴還是不理解,不是說使用key的唯一性求解嗎,你這樣寫我怎麼看的有點蒙呢?不是應該迴圈一次陣列,將key,value對調,然後再迴圈新陣列,判斷target-key是否存在嗎,這樣確實是沒錯的, 但是第二次迴圈是否有些多餘了呢?是否可以通過一次迴圈解決這個問題呢?答案當然是肯定的
以上面的陣列為例:
**第二種方式:**
第一次迴圈,迴圈4次,新陣列為
$res1=[
2=>0,
7=>1,
11=>2,
15=>3]
;複雜度:n
第二次迴圈
取出 9-2
=7的值在陣列中位置,求解[0,
1]複雜度 1
整體複雜度為 4+1
=5;*
*第一種方式:**
第一次迴圈:
直接判斷要插入的值是否存在於新陣列中9-
2=7不存在於新資料,繼續迴圈9-
7=2存在於新陣列,迴圈結束
整體複雜度複雜度 2
結果顯而易見,第一種方式效果更好
兩數之和(每日一題)
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9...
LeetCode每日一題 兩數之和
前言 堅持日更leetcode刷題系列 不積跬步,無以至千里 不積小流,無以成江海。願與諸君共勉!題目 1.兩數之和 題目描述 給定乙個整數陣列nums和乙個目標值target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這...
每日一題 1 兩數之和 20190921
兩數之和 給定乙個整數陣列和乙個整數 target 求陣列中和為 target 的兩個整數的下標。每個輸入只會有乙個答案。1 暴力列舉,時間複雜度 class solution public vectortwosum vector nums,int target vectorans for int ...