1. 程式人生 > >LeetCode167兩數之和 II - 輸入有序陣列-C語言

LeetCode167兩數之和 II - 輸入有序陣列-C語言

給定一個已按照升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。

函式應該返回這兩個下標值 index1 和 index2,其中 index1 必須小於 index2

說明:

  • 返回的下標值(index1 和 index2)不是從零開始的。
  • 你可以假設每個輸入只對應唯一的答案,而且你不可以重複使用相同的元素。

示例:

輸入: numbers = [2, 7, 11, 15], target = 9
輸出: [1,2]
解釋: 2 與 7 之和等於目標數 9 。因此 index1 = 1, index2 = 2 。
/**
 * Return an array of size *returnSize.
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* twoSum(int* numbers, int numbersSize, int target, int* returnSize) {
    int left = 0;
    int right = numbersSize - 1;
    int *array = (int *)malloc(2*sizeof(int));
    *returnSize = 2;
    while(left <= right){
        if(numbers[left] + numbers[right] == target){
            break;
        }
        else if(numbers[left] + numbers[right] < target){
            left += 1;
        }
        else
            right -= 1;
    }
    array[0] = left + 1;
    array[1] = right + 1;
    return array;
}