这道题本来我使用嵌套for循环来解的,可是发现这样在数据量特别大的时候会出现超时现象,就放弃了,然后选择使用双指针来解。
方法: 双指针(PHP)
class Solution {
/**
* @param Integer[] $numbers
* @param Integer $target
* @return Integer[]
*/
function twoSum($numbers, $target) {
$low = 0;
$high = count($numbers) - 1;
while ($low < $high) {
$sum = $numbers[$low] + $numbers[$high];
if ($target === $sum) {
return [$low + 1, $high + 1];
} else if ($sum > $target) {
--$high;
} else {
++$low;
}
}
}
}
解释:
在解题的时候我没考虑会不会出现跳过正确解的情形,然后参考了官方答案,使用双指针解这道题的时候是不会出现跳过正确解的。
因为题目给出的数组是一个有序数组。
测试结果:
执行用时:12 ms, 在所有 PHP 提交中击败了85.35%的用户
内存消耗:17 MB, 在所有 PHP 提交中击败了72.61%的用户
通过测试用例:19 / 19
官网链接:
力扣https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted/