計算數組中哪兩項的和爲某值[算法]

輸入一個已經按升序排序過的數組和一個數字,在數組中查找兩個數,使得它們的和正好是輸入的那個數字。要求時間複雜度是O(n)。如果有多對數字的和等於輸入的數字,輸出任意一對即可。例如輸入數組1、2、4、7、11、15和數字15。由於4+11=15,因此輸出4和11
// 基礎數據
$arr = [1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17];
// 和的值
$number = 15;
$rt_arr = [
	'first' => 0,
	'second' => count($arr)-1
];
for($i=1;$rt_arr['first']!=$rt_arr['second'];$i++){
	// 如果前項+後項比預定和值大 後項就前移
	if($arr[$rt_arr['first']]+$arr[$rt_arr['second']]>$number){
		$rt_arr['second']--;
	// 如果前項+後項比預定和值小 前項就後移
	} else if($arr[$rt_arr['first']]+$arr[$rt_arr['second']]<$number){
		$rt_arr['first']++;
	} else {
		break;
	}
}
if($rt_arr['first']==$rt_arr['second']){
	echo '數組中不存在這兩項';
}else{
	echo '第'.$rt_arr['first'].'項的值爲'.$arr[$rt_arr['first']].'<br/>';
	echo '加上<br/>';
	echo '第'.$rt_arr['second'].'項的值爲'.$arr[$rt_arr['second']].'<br/>';
	echo '和正好是'.$number;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章