解题思路:双指针
题目给定的条件是数组是按递增排序的
我们可以使用双指针的思路,维护两个指针i,j分别维护数组的首和尾
在i < j的条件范围内,计算nums[i]与nums[j]的和sum
sum < target;说明当前两数之和小于target,i指针应该向后移动sum > target;说明当前两数之和大于target,j指针应该向前移动sum == target;因为题目要求输出任意一对符合条件的结果,所以当sum == target返回nums[i],nums[j]数组即可
代码如下
代码
Java
class Solution {public int[] twoSum(int[] nums, int target) {// 双指针int i = 0;int j = nums.length - 1;while(i < j){int sum = nums[i] + nums[j];if(sum < target){i++;}else if(sum > target){j--;}else{return new int[]{nums[i],nums[j]};}}return new int[0];}}
复杂度分析
- 时间复杂度:O(N)
最差的情况,需要遍历整个数组,所以时间复杂度为:O(N)
- 空间复杂度:O(1)
本题只需要 i,j 两个有限变量,额外空间复杂度为:O(1)
