zoukankan      html  css  js  c++  java
  • 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很方便,但是后来发现到处都是,看起来不舒服。

  • 相关阅读:
    【Qt开发】Win7 64位qt-windows-x86-msvc2015-5.6.0 DLL依赖库打包
    【CUDA】CUDA框架介绍
    【CUDA】CUDA框架介绍
    【CUDA开发】CUDA从入门到精通
    【CUDA开发】CUDA从入门到精通
    【CUDA开发】CUDA的安装、Nvidia显卡型号及测试
    【CUDA开发】CUDA的安装、Nvidia显卡型号及测试
    【Qt开发】Qt控件之进度条
    【Qt开发】Qt控件之进度条
    【Qt开发】布局控件之间的间距设置
  • 原文地址:https://www.cnblogs.com/pyexile/p/11180427.html
Copyright © 2011-2022 走看看