問題描述:
- 給定一個數組$arr,一個目標值$target
- 在$arr中查找出兩個元素其值相加等於$target
- 並返回這兩個元素的下標
問題示例:
- $arr = [2, 7, 11, 15], $target = 9
- nums[0] =2,nums[1] =7
- return [0, 1]
來吧,老弟,先在你的腦海中構思一下你的思路,How to solve? 下面是個人給出的思路介紹,方法比較暴力,僅供參考
思路引導
首先題目並沒有說找出所有符合兩個元素相加等於$target的要求,這對於我們這個題來說難度降低了很多(能力強的同學也可以試一試,就是將符合要求的元素下標放到一個數組中,最后統一返回)。
大致思路
首先我們嵌套兩層循環,外層循環主要是用來取出一個元素作為定值,每次與其他元素的值(除本身以外的值)進行相加,然后與$target比對,當一個定值與元素內的元素相加后與$target對比,然后外層循環在取出數組中下一個元素作為定值,然后再與其他元素的值相加與$target對比,以此類推
說到這里,都是黑乎乎的文字?是不是不喜歡看文字?人家都強調有圖有真相,當然,咱們也把圖安排上,來,看下面,它來了...
圖也有了,關鍵的代碼就要安排上了,下面來一起看一下代碼
function twoSum($nums,$target){ for ($i=count($nums)-1;$i>=0;$i--){ for ($j=0;$j<$i;$j++){ if($nums[$i]+$nums[$j]==$target){ return [$j,$i]; } } } return []; }
備注:好了,今天的文章就分享到這里,個人理解有限,不足的地方歡迎大家留言指正!
我是你們的朋友-五哥!