博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3 sum closest
阅读量:4657 次
发布时间:2019-06-09

本文共 1287 字,大约阅读时间需要 4 分钟。

这篇很短的博客包括以下几个部分:

 

题目:

Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.

For example, given array S = {-1 2 1 -4}, and target = 1.

The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

分析:

  1. 对数组进行排序
  2. 因为要使得3个数字的和相加和target最接近,那么使用3个指针来处理
    1. 第一个指针i从头开始遍历整个数组
    2. 第二个指针j从i+1开始
    3. 第三个指针k从n-1开始(n为数组长度)
  3. 当i固定时,j和k做以下处理,直到j>=k:
    1. 如果sum (=num[i]+num[j]+num[k])小于target,j++
    2. 如果sum大于target,k—
    3. 如果sum等于target,函数返回0
  4. 在这个过程中记录下|target-sum|的最小值

真的不难。一头一尾两个指针,这算是什么思想呢……姑且认为是"排除法"好了╮(╯▽╰)╭。在任何一个时刻,i或j都只有一个可能的移动方向,因为[i+1,j-1]和[k+1,n-1]两段已经被排除了。

代码:

#include <vector>

#include <algorithm>

using namespace std;

 

class Solution

{

public:

    int threeSumClosest(vector<int> &num, int target)

    {

        if(num.size() < 3) return 0;

 

        sort(num.begin(), num.end());

 

        int mindiff = num[0]+num[1]+num[2]-target;

 

        for(int i = 0; i < num.size()-2; i++)

        {

            int j = i+1;

            int k = num.size()-1;

 

            while(j < k)

            {

                int diff = num[i]+num[j]+num[k]-target;

                mindiff = (abs(diff) < abs(mindiff)) ? diff : mindiff;

 

                if(diff < 0)

                    j++;

                else if(diff > 0)

                    k--;

                else

                    break;

            }

 

            if(mindiff == 0) break;

        }

 

        return mindiff+target;

    }

};

 

转载于:https://www.cnblogs.com/starship/archive/2013/05/02/3055371.html

你可能感兴趣的文章
实时读取日志文件
查看>>
php单页面的点击次数
查看>>
C# Datetime 赋空
查看>>
python 基础 ---- 文件读写
查看>>
python操作mongodb
查看>>
Spring----工厂注入和bean的生命周期
查看>>
随机点名器
查看>>
React Native入门 认识Flexbox布局
查看>>
LINUX平台可以用GDB进行反汇编和调试。
查看>>
kvm 虚拟化的使用
查看>>
一个删除磁盘文件的恶意软件分析
查看>>
react组件里阻事件冒泡
查看>>
Maven中的dependencyManagement 意义
查看>>
Navicat连接oracle,出现Only compatible with oci version 8.1 and&nb (转)
查看>>
Target runtime com.genuitec.runtime.generic.jee60 is not defined
查看>>
为什么要使用NoSQL
查看>>
第二次Soring冲刺计划第五天(团队)
查看>>
使用反射、特性简化代码
查看>>
emoj表情插入mysql,取出mysql的处理工具类
查看>>
jdk环境搭建
查看>>