【题目概要】
167. Two Sum II - Input array is sorted
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.
【思路分析】
- 数组是已经排序好的,因此可以采用双指针的方法,且很好的避免了取到相同数的问题
- 若是数组是无序的,建议使用Hashtable
【代码示例】
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* numbers, int numbersSize, int target, int* returnSize){
int *re = (int*)malloc(sizeof(int)*2);
int left = 0;
int right = numbersSize-1;
while(left < right)
{
int key = numbers[left] + numbers[right];
if(key == target)
break;
else if(key > target)
right--;
else
left++;
}
//要求下标从1开始
re[0] = left+1;
re[1] = right+1;
*returnSize = 2;
return re;
}