每日一題 求解兩數之和PHP篇

2021-10-11 09:11:00 字數 1353 閱讀 1537

題目如下

兩數之和

給定乙個整數陣列 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 ...