一:解题思路
这个题目是在p2的基础上有了一点改动,将数组变成了递增有序的。其解法可以完全和p2一样。但是有没有更好的解法呢?将时间复杂度和空间复杂度都降低呢?答案是:当然有的!因为给定的数组的递增的,所以我们可以利用二分搜索和双指针的思想。1.我们用2个指针分别指向数组的首部和尾部,分别定义为首指针和尾指针。2.将首指针和尾指针所对应的数组元素分别相加,如果得到的和大于目标值,那么就要把尾指针--,如果和小于目标值,那么就要把首指针++。这个方法只需要遍历一遍数组,没有使用额外的存储空间,因此时间复杂度为O(n),空间复杂度为O(1)。
二:完整代码示例 (C++版和Java版)
C++98/03
p3 在有序数组中求两数之和(对leetcode1 的改编)
原文:https://www.cnblogs.com/repinkply/p/12422732.html