【两数之和】C语言版

B站影视 电影资讯 2025-02-22 16:25 1

摘要:如果两个元素相加大于target,那么说明right左边的所有元素与right所指元素相加都大于target,此时right应该左移,即此时right指向的元素一定无法与其他的元素组成等于target;

注:上述题目并没有说数组有序,所以以下解法基于数组有序提出

思考:在数组有序的前提下,可以考虑双指针的写法,一个左指针,一个右指针;

先将left指向数组中最小的元素,right指向最大的元素;

如果两个元素相加大于target,那么说明right左边的所有元素与right所指元素相加都大于target,此时right应该左移,即此时right指向的元素一定无法与其他的元素组成等于target;

同理,如果两个元素相加小于target,说明left右边的所有元素与left所指元素相加都小于target,此时left应该右移,即此时left指向的元素一定无法与其他的元素组成等于target;

那么就可以编写一个循环:当left

以下是代码:

#include#include// 两数之和 int*two_sum(int*nums_arry,intlen_arry,inttarget){int*res_arry=(int*)malloc(sizeof(int)*2);res_arry[0]=0;res_arry[1]=0;intleft=0;intright=len_arry-1;while(lefttarget){right-=1;}}returnres_arry;}intmain{intnums_arry={2,3,4,7,8};intlen_arry=sizeof(nums_arry)/sizeof(nums_arry[0]);inttarget=7;int*res=two_sum(nums_arry,len_arry,target);intres_len=sizeof(res)/sizeof(res[0]);for(inti=0;i

上述方法,相当于每次都以O(1)的复杂度淘汰掉了一个数,整体时间复杂度为O(n)

暴力解法:

int*twoSum(int*nums,intnumsSize,inttarget,int*returnSize){for(inti=0;i

来源:偶像追踪者一点号

相关推荐