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很方便,但是后来发现到处都是,看起来不舒服。

 

posted @ 2019-07-13 14:06  wtwexile  阅读(351)  评论(0编辑  收藏  举报