Given an array of integers that is already sorted in ascending order, find two numbers such that they add up to a specific target number.
The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2.
Note:
- Your returned answers (both index1 and index2) are not zero-based.
- You may assume that each input would have exactly one solution and you may not use the same element twice.
Example:
Input: numbers = [2,7,11,15], target = 9 Output: [1,2] Explanation: The sum of 2 and 7 is 9. Therefore index1 = 1, index2 = 2.
思路:
与1. Tow Sum类似,这题的输入是有序数组,限定了一定会有解,用双指针来做,定义左右两个指针,左指针指向第一个数,右指针指向最后一个数,然后用这两个数的和与Target比较,如果比Target小,左指针向右移一位,如果比Target大,右指针向左移一位。然后再进行比较,直到找到或者两个指针相遇为止。
注意:左右指针是从0到 len(numbers)-1, 输出结果是从1开始的index.
Time: O(n) Space: O(1)
Java: wo, 0 ms, faster than 100.00% of Java online submissions
class Solution { public int[] twoSum(int[] numbers, int target) { int[] res = new int[2]; int i = 0, j = numbers.length - 1; while (i < j) { if ((numbers[i] + numbers[j]) > target) { j--; } else if ((numbers[i] + numbers[j]) < target) { i++; } else { res[0] = i + 1; res[1] = j + 1; break; } } return res; } }
Java: 1 ms, faster than 68.07% of Java online submissions
public class Solution { public int[] twoSum(int[] numbers, int target) { if(numbers==null || numbers.length < 1) return null; int i=0, j=numbers.length-1; while(i<j) { int x = numbers[i] + numbers[j]; if(x<target) { ++i; } else if(x>target) { --j; } else { return new int[]{i+1, j+1}; } } return null; } }
Python:
class Solution: def twoSum(self, nums, target): start, end = 0, len(nums) - 1 while start != end: sum = nums[start] + nums[end] if sum > target: end -= 1 elif sum < target: start += 1 else: return [start + 1, end + 1]
C++:
class Solution { public: vector<int> twoSum(vector<int>& numbers, int target) { int l = 0, r = numbers.size() - 1; while (l < r) { int sum = numbers[l] + numbers[r]; if (sum == target) return {l + 1, r + 1}; else if (sum < target) ++l; else --r; } return {}; } };
相似题目:
[LeetCode] 170. Two Sum III - Data structure design 两数之和之三 - 数据结构设计
[LeetCode] 653. Two Sum IV - Input is a BST 两数之和之四 - 输入是二叉搜索树