LeetCode(C语言) - 167. 两数之和 II - 输入有序数组
https://leetcode.cn/problems/two-sum-ii-input-array-is-sorted/
注意
参数returnSize为址传递,应赋值为2,表示返回的数组长度为2
/** * Note: The returned array must be malloced, assume caller calls free(). */ int* twoSum(int* numbers, int numbersSize, int target, int* returnSize){ }
提交代码1:暴力法
时间复杂度为O()
int* twoSum(int* numbers, int numbersSize, int target, int* returnSize){ *returnSize=2; int *res=(int *)malloc(2*sizeof(int)); for(int i=0;i<numbersSize-1;i++){ for(int j=i+1;j<numbersSize;j++){ if(numbers[i]+numbers[j] == target){ res[0] = i+1; res[1] = j+1; return res; } } } res[0] = 1; res[1] = 2; return res; }
执行结果
执行结果: 通过 显示详情 添加备注 执行用时: 1184 ms , 在所有 C 提交中击败了 9.19% 的用户 内存消耗: 7.1 MB , 在所有 C 提交中击败了 56.87% 的用户 通过测试用例: 21 / 21
完整代码
#include <stdio.h> #include <malloc.h> int* twoSum(int* numbers, int numbersSize, int target, int* returnSize){ *returnSize=2; int *res=(int *)malloc(2*sizeof(int)); for(int i=0;i<numbersSize-1;i++){ for(int j=i+1;j<numbersSize;j++){ if(numbers[i]+numbers[j] == target){ res[0] = i+1; res[1] = j+1; return res; } } } res[0] = 1; res[1] = 2; return res; } main(){ // int a[] = {2,7,11,15},target = 9; int a[] = {2,3,4},target = 6; int len = sizeof (a) / sizeof (int); for(int i=0;i<len;i++){ printf("%d ",a[i]); } printf("\n"); int returnSize; int* b = twoSum(a,len,target,&returnSize); for(int i=0;i<returnSize;i++){ printf("%d ",b[i]); } printf("\n"); }
控制台输出
2 3 4 1 3 -------------------------------- Process exited after 0.3133 seconds with return value 0 请按任意键继续. . .
思路2 : 二分法
时间复杂度O(nlogn)
第一层i和代码1一样,第二层通过二分法查找target-numbers[i],查找到返回i和值为target-numbers[i]的下标,找不到i+1继续。
二分法依赖数组的有序性。
代码暂时先不实现了
思路3 : 对撞指针
时间复杂度O(n)
两头往中间挤,从而找到两个目标元素的下标。依赖数组的有序性。
int* twoSum(int* numbers, int numbersSize, int target, int* returnSize){ *returnSize=2; int *res=(int *)malloc(2*sizeof(int)); int left=0,right=numbersSize-1; while(left<right){ if(numbers[left]+numbers[right]<target){ left++; }else if(numbers[left]+numbers[right]>target){ right--; }else{ break; } } res[0] = left+1; res[1] = right+1; return res; }
执行结果
执行结果: 通过 显示详情 添加备注 执行用时: 12 ms , 在所有 C 提交中击败了 91.06% 的用户 内存消耗: 7 MB , 在所有 C 提交中击败了 58.90% 的用户 通过测试用例: 21 / 21
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性