学习时间:
2023年3月8日
题目描述:
![](https://img-blog.csdnimg.cn/1ec7b0733b604d1c9ceed7c7381ead78.png)
题解分享:
// 作 者 : 繁 华 倾 夏
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h> // 调用malloc函数
// 力扣(LeetCode):167. 两数之和 II - 输入有序数组
// numbers:数组 numbersSize:数组长度 target:目标值 returnSize:返回的数组长度
int* twoSum(int* numbers, int numbersSize, int target, int* returnSize) {
int* re = (int*)malloc(sizeof(int) * 2); // 设置动态数组空间
*returnSize = 2; // 动态数组的长度为2
for (int i = 0; i < numbersSize; i++) { // 遍历numbersSize数组
int low = i + 1, high = numbersSize - 1, mid; // 进行二分查找
while (low <= high) {
int mid = (low + high) / 2;
if (numbers[mid] == target - numbers[i]) {
re[0] = i + 1; re[1] = mid + 1;
return re;
}
else if (numbers[mid] > target - numbers[i]) {
high = mid - 1;
}
else {
low = mid + 1;
}
}
}
re[0] = -1; re[1] = -1;
return re;
}
// 测试用例
// 输入 numbers = [2, 7, 11, 15], target = 9
// 输出 [1, 2]
int main() {
int numbers[] = { 2,7,11,15 };
int numbersSize = sizeof(numbers) / sizeof(numbers[0]);
int target = 9;
int returnSize;
int nums[2];
int* re = nums;
re = twoSum(numbers, numbersSize, target, &returnSize);
for (int i = 0; i < returnSize; i++) {
printf("%d ", re[i]);
}
return 0;
}
【繁华倾夏】【每日力扣题解分享】【Day53】