php 找出一個數組中的兩個數字,讓這兩個數字之和等於一個給定的值
有關於php的有好幾種思路,很多部落格都有我就不一一介紹了,只是貼程式碼僅供參考。
問題:給一個一維陣列,不確定具體有多少元素,例如$arr = [1,2,3,4,3,2,1],讓他們任意兩數字相加的和等於一個給定的值,比如說 5 ,可能有好幾個兩個數相加都是5,但只是取最先開始兩個相加的數等於5的,這兩個數的索引。
先貼php程式碼,兩種方式,一種兩個for迴圈,另外一種一個迴圈
第一種:
function twoSum($arr, $sum)
{
$len = count($arr);
if ($len < 2) return false;
$tmp = [];
$repeat = [];
$flag = [];
for ($j = 0; $j < $len; $j++) {
$minus = $sum - $arr[$j];
unset($arr[$j]);
foreach($arr as $key => $two) {
if( $minus == $two ) {
echo '索引值為['.$j.','.$key.']';die;
}
}
}
}
$arr = [1, 1, 1, 3];
// $arr = [1,2,2,2,8,8,6,5,4,10];
twoSum($arr, 2);
第二種:
function xiao( $arr, $sum )
{
$len = count($arr);
for($j = 0; $j < $len; $j++) {
$minus = $sum - $arr[$j];
unset($arr[$j]);
$two = array_search("$minus",$arr);
if( $two ){
echo '陣列的索引值為['.$j.','.$two.']';die;
}
}
}
$arr = [3,3,3,3,4];
xiao($arr,6);
可以看一下時間複雜度,第二種比較合適,有bug的話,歡迎提出
python程式碼:
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
for i in nums:
if target-i in nums:
if (target - i == i and nums.count(i) >= 2) or target - i != i:
a=nums.index(i)
b=nums.index(target - i, a + 1, len(nums))
return [a,b]
s = Solution()
print(s.twoSum([1,2,3,4,5], 9))
時間複雜度也是比較低的,建議用這種