# C#LeetCode刷题之#167-两数之和 II – 输入有序数组（Two Sum II – Input array is sorted）

• 返回的下标值（index1 和 index2）不是从零开始的。
• 你可以假设每个输入只对应唯一的答案，而且你不可以重复使用相同的元素。

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:

• You may assume that each input would have exactly one solution and you may not use the same element twice.

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.

```public class Program {

public static void Main(string[] args) {
int[] prices = { 2, 7, 11, 15 };

var res = TwoSum(prices, 9);
Console.WriteLine(\$"[{res[0]},{res[1]}]");

}

private static int[] TwoSum(int[] numbers, int target) {
int left = 0, right = numbers.Length - 1, sum = 0;
//双指针法，因为原数组已经有序
//所有用左右指针分别指向首和尾
//根据值的比较移动指针直到相撞时为止
while(left < right) {
sum = numbers[left] + numbers[right];
//当2个值的和大于目标值时，左移右指针
if(sum > target) right--;
//当2个值的和小于目标值时，右移左指针
else if(sum < target) left++;
//匹配目标值时，直接返回
else if(sum == target)
return new int[] { left + 1, right + 1 };
}
//找不到时返回空数组
return new int[] { };
}

}```

`[1,2]`

(1)