leetcode26

题目

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

例如,给定数组 nums = [-1,2,1,-4],,和 target = 1,与 target 最接近的三个数的和为 2,即(-1 + 2 + 1 = 2).

思路

最简单的做法就是遍历数组,将每组结果的和加起来然后减去target,取绝对值得到minNum,之后的每组遍历采用同样的方法,如果得到的三个数的和减去target去绝对值比minNum小,则保存这三个数的和,这样全部遍历完之后,我们就得到了和最接近target的三个数。

代码

 1 int threeSumClosest(int* nums, int numsSize, int target){
 2     int *p1, *p2, *p3, sum;
 3     p1 = nums;
 4     p2 = nums+1;
 5     p3 = nums+2;
 6     sum = *p1 + *p2 + *p3;
 7     int minNum = abs(sum- target);
 8     int rst = sum;
 9     for (p1; p1 < &nums[numsSize-2]; p1++){
10         for (p2=p1+1; p2 < &nums[numsSize-1]; p2++){
11             for (p3=p2+1; p3 < &nums[numsSize]; p3++){
12                 sum = *p1 + *p2 + *p3;
13                 if (abs(sum - target) < minNum) {
14                     minNum = abs(sum - target) ;
15                     rst = sum;
16                 }
17             }
18         }
19     }
20     return rst;
21 }
View Code

算法能过,但是效果不是很好,用时比较长,下面是三次修改提交之后的结果。

用时最长的那个遍历是直接用用数组的索引取的值,后面两个用的都是指针,似乎快了一些。

感触

之前刷题都是用python,但是现在我发现python刷题有个弊端,因为它封装了很多东西,所以很多底层的东西你会忽略掉。所以以后我还是用C写吧,另外,写了一段时间C之后,发现C语言真的很美,结构逻辑很清晰。我看之前写的一些python的代码,感觉很乱,虽然python很方便,但是后来发现到处都是,看起来不舒服。

 

转载于:https://www.cnblogs.com/pyexile/p/11180427.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值