[LeetCode] 167. Two Sum II - Input array is sorted 两数和 II - 输入是有序的数组
2018-02-28 09:11
417 查看
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大,右指针向左移一位。然后再进行比较,直到找到或者两个指针相遇为止。
Time: O(n) Space: O(1)
Java:
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 两数之和之四 - 输入是二叉搜索树
相关文章推荐
- [LeetCode]167. Two Sum II - Input array is sorted(输入两数和 II - 输出排序数组这两数位置)
- [LeetCode] Two Sum II - Input array is sorted 两数之和之二 - 输入数组有序
- 【leetcode】Two Sum II - Input array is sorted(输入有序的数组,求两个数的和)
- LeetCode 167. Two Sum II - Input array is sorted (两数之和之二 - 输入的是有序数组)
- LeetCode 167. Two Sum II - Input array is sorted,有序数组中的两个元素之和为某个数值,输出这两个元素的索引,且index1<index2
- Two Sum II - Input array is sorted 两数之和之二 - 输入数组有序
- Leetcode:167. Two Sum II - Input array is sorted 求数组中的两个数的和等于给定值,求这两个数的下标
- LeetCode 167. Two Sum II - Input array is sorted(两数和)
- 167. Two Sum II - Input array is sorted (在有序数组中确定和为给定值的两个元素的下标)
- leetcode Two Sum II - Input array is sorted <面试常考题>
- 【LeetCode】167. Two Sum II - Input array is sorted
- [leetcode]167. Two Sum II - Input array is sorted
- LeetCode 167. Two Sum II - Input array is sorted
- leetcode167. Two Sum II - Input array is sorted
- Java [Leetcode 167]Two Sum II - Input array is sorted
- leetcode167: Two Sum II - Input array is sorted
- [LeetCode]167. Two Sum II - Input array is sorted
- LeetCode 167. Two Sum II - Input array is sorted
- [LeetCode] 167. Two Sum II - Input array is sorted
- 【LeetCode】167. Two Sum II - Input array is sorted