leetcode 16. 3Sum Closest

来源:互联网 发布:波风水门实力 知乎 编辑:程序博客网 时间:2024/05/01 12:12

这道题和上一题很相似,也是i从1到numsSize-2遍历,nums[i]作为中间的数,j k从0和numsSize-2向i靠拢,如果nums[i]+nums[j]+nums[k]-target>0,k--,如果nums[i]+nums[j]+nums[k]-target<0,j++,等于0的话直接返回target值。代码如下,竟然只用了4ms,还有谁???

int quickSort(int *nums,int numSize){int i,j,key,temp,flag;key=nums[0];i=0;flag=0;j=numSize-1;if(numSize<=1)return 0;while(1){while(1){if(nums[j]<key){temp=nums[i];nums[i]=nums[j];nums[j]=temp;break;}j--;if(i==j){flag=1;break;}}if(flag==1)break;while(1){if(nums[i]>key){temp=nums[i];nums[i]=nums[j];nums[j]=temp;break;}i++;if(i==j){flag=1;break;}}if(flag==1)break;}quickSort(nums,i);quickSort(nums+i+1,numSize-i-1);return 0;}int threeSumClosest(int* nums, int numsSize, int target) {    int i,j,k;    int currentDistance=2147483647;    int temp,temp1,temp2;    int res;    quickSort(nums,numsSize);    for(i=1;i<numsSize-1;i++)    {        j=0;        k=numsSize-1;        while(1)        {            temp1=nums[i]+nums[j]+nums[k];            temp=temp1-target;            temp2=abs(temp);            if(temp2<currentDistance)            {                currentDistance=temp2;                res=temp1;            }            if(temp<0)            {                j++;                if(j==i)                    break;            }            else if(temp>0)            {               k--;               if(k==i)                    break;            }            else                return res;        }    }    //printf(">%d %d %d\n",j,i,k);    return res;}




0 0
原创粉丝点击