一.题目描述
给定一个已按照 非递减顺序排列 的整数数组 numbers
,请你从数组中找出两个数满足相加之和等于目标数 target
。
https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted/
二.代码
public int[] twoSum(int[] numbers, int target) {
int i = 0;
int j = numbers.length - 1;
while (i < j) {
int sum = numbers[i] + numbers[j];
if (sum == target) {
return new int[]{i + 1, j + 1};
} else if (sum > target) {
j--;
} else {
i++;
}
}
return null;
}
public int[] twoSum(int[] numbers, int target) {
for (int i = 0; i < numbers.length - 1; i++) {
int low = i + 1, high = numbers.length - 1;
int a = target - numbers[i];
while (low <= high) {
int mid = (high - low) / 2 + low;
if (numbers[mid] == a) {
return new int[] {i + 1, mid + 1};
} else if (numbers[mid] > a) {
high = mid - 1;
} else {
low = mid + 1;
}
}
}
return new int[] {-1, -1};
}
public int[] twoSum(int[] numbers, int target) {
int i = 0, j = numbers.length - 1;
while (i < j) {
int m = (i + j) / 2;
if (numbers[i] + numbers[m] > target) {
j = m - 1;
} else if (numbers[m] + numbers[j] < target) {
i = m + 1;
} else if (numbers[i] + numbers[j] > target) {
j--;
} else if (numbers[i] + numbers[j] < target) {
i++;
} else {
return new int[] {i + 1, j + 1};
}
}
return new int[] {-1, -1};
}