C语言两数之和(LeeCode 1. 两数之和 的变形,假定nums序列是从小到大排序的,不然就是另一种解法了) 输入:nums = [2, 7, 11, 15], target = 9 输出: [0, 1] //因为 nums[0] + nums[1] = 2 + 7 = 9
时间: 2024-09-22 16:06:52 浏览: 41
题目描述的是一道编程问题,涉及到了C语言的数组操作。给定一个有序整数数组`nums`和一个目标值`target`,需要找到两个数组元素,它们的和等于目标值,并返回这两个元素的下标。这个任务可以通过双指针法来解决,从数组的两端开始向中间移动,如果当前元素的和大于目标值,则将右指针向左移一位;反之,如果小于目标值,则将左指针向右移一位。当发现两个元素之和等于目标值时,就找到了结果并立即返回。
下面是一个简单的C语言解决方案:
```c
#include <stdio.h>
// 返回包含两个元素下标的数组,元素之和等于target
int* twoSum(int* nums, int numsSize, int target) {
if (nums == NULL || numsSize < 2) {
return NULL;
}
int left = 0; // 左指针
int right = numsSize - 1; // 右指针
while (left < right) {
int sum = nums[left] + nums[right];
if (sum == target) {
// 找到符合条件的元素,返回其下标
int* result = (int*)malloc(sizeof(int) * 2);
result[0] = left;
result[1] = right;
return result;
} else if (sum < target) {
// 和小,右指针移到左指针左边
left++;
} else {
// 和大,左指针移到右指针右边
right--;
}
}
// 没有找到符合条件的元素
free(result); // 确保释放已分配的空间
return NULL;
}
int main() {
int nums[] = {2, 7, 11, 15};
int numsSize = sizeof(nums) / sizeof(nums[0]);
int target = 9;
int* result = twoSum(nums, numsSize, target);
if (result != NULL) {
printf("[%d, %d]\n", result[0], result[1]); // 输出:[0, 1]
free(result); // 释放内存
} else {
printf("未找到满足条件的元素组合\n");
}
return 0;
}
```
阅读全文