【一天一道LeetCode】#16. 3Sum Closest
一天一道LeetCode系列
(一)题目:
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).
(二)解题
直接用三重循环,然后考虑到重复的数字,则需要先排序,以便于后续去重。 
其次,当等于target时,则直接返回
class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        int min = 2147438647;
        int key =0;
        std::sort(nums.begin() , nums.end());
        for(int i = 0  ; i < nums.size()-2 ; )
        {
            for(int j = i+1 ; j < nums.size()-1 ;)
            {
                for(int k = j+1 ; k < nums.size() ; )
                {
                    int gap = nums[i]+nums[j]+nums[k];
                    int temp = gap-target>0?gap-target:target-gap;
                    if(temp<min){
                        min = temp;
                        key = gap;
                        if(min ==0)  //如果找到等于0的则返回
                        {
                            return key;
                        }
                    }
                    k++;
                    while(k<nums.size() && nums[k] == nums[k-1]) ++k;
                }
                j++;
                while(j<nums.size()-1 && nums[j] == nums[j-1]) ++j;
            }
            i++;
            while(i<nums.size()-2 && nums[i] == nums[i-1]) ++i;
        }
        return key;
    }
};在网上看到另外一种快速的解法。O(n^2)
class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        std::sort(nums.begin() , nums.end());
        bool isfirst = true;
        int ret;
        for(int i = 0  ; i < nums.size() ; i++)
        {
            int j = i+1;
            int k = nums.size()-1;
            while(j<k){
                int sum = nums[i]+nums[j]+nums[k];
                if(isfirst)
                {
                    ret = sum;
                    isfirst = false;
                }
                else
                {
                    if(abs(sum - target) < abs(ret - target))
                    {
                        ret = sum;
                    }
                }
                if(ret == target)
                    return ret;
                if(sum>target)
                    k--;
                else
                    j++;
            }
        }
        return ret;
    }
};【一天一道LeetCode】#16. 3Sum Closest的更多相关文章
- LeetCode 16. 3Sum Closest(最接近的三数之和)
		LeetCode 16. 3Sum Closest(最接近的三数之和) 
- Leetcode 16. 3Sum Closest(指针搜索)
		16. 3Sum Closest Medium 131696FavoriteShare Given an array nums of n integers and an integer target, ... 
- [LeetCode] 16. 3Sum Closest 最近三数之和
		Given an array nums of n integers and an integer target, find three integers in nums such that the s ... 
- Leetcode 16. 3Sum Closest
		Given an array S of n integers, find three integers in S such that the sum is closest to a given num ... 
- Java [leetcode 16] 3Sum Closest
		题目描述: Given an array S of n integers, find three integers in S such that the sum is closest to a giv ... 
- [LeetCode] 16. 3Sum Closest 解题思路
		Given an array S of n integers, find three integers in S such that the sum is closest to a given num ... 
- LeetCode 16. 3Sum Closest. (最接近的三数之和)
		Given an array S of n integers, find three integers in S such that the sum is closest to a given num ... 
- LeetCode——16. 3Sum Closest
		一.题目链接:https://leetcode.com/problems/3sum-closest/ 二.题目大意: 给定一个数组A和一个目标值target,要求从数组A中找出3个数来,使得这三个数的 ... 
- 蜗牛慢慢爬 LeetCode 16. 3Sum Closest [Difficulty: Medium]
		题目 Given an array S of n integers, find three integers in S such that the sum is closest to a given ... 
- [LeetCode] 16. 3Sum Closest ☆☆☆
		Given an array S of n integers, find three integers in S such that the sum is closest to a given num ... 
随机推荐
- Docker学习笔记3:CentOS7下安装Docker-Compose
			Docker-Compose是一个部署多个容器的简单但是非常必要的工具. 安装Docker-Compose之前,请先安装 python-pip,请参考我的另一篇博文CentOS7下安装python-p ... 
- Swift:Minimizing Annotation with Type Inference
			许多程序猿更喜欢比如Python和Javascript这样的动态语言,因为这些语言并不要求程序猿为每个变量声明和管理它们的类型. 在大多数动态类型的语言里,变量可以是任何类型,而类型声明是可选的或者根 ... 
- Spring之DAO模块
			Spring的DAO模块提供了对JDBC.Hibernate.JDO等DAO层支持 DAO模块依赖于commons-pool.jar.commons-collections.jar Spring完全抛 ... 
- android面试手册
			1. Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念 DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚 ... 
- Erlang标准数据结构的选择
			Erlang标准数据结构的选择(金庆的专栏)gen_server with a dict vs mnesia table vs etshttp://stackoverflow.com/question ... 
- Android使用HttpUrlConnection请求服务器发送数据详解
			HttpUrlConnection是java内置的api,在java.net包下,那么,它请求网络同样也有get请求和post请求两种方式.最常用的Http请求无非是get和post,get请求可以获 ... 
- Makefile自动生成:cmake
			http://blog.csdn.net/pipisorry/article/details/51647073 编辑makefile文件CMakeLists.txt,使用cmake命令自动生成make ... 
- 自定义gradview
			http://blog.csdn.net/jdsjlzx/article/details/7525724 虽然Android已自带了GridView,但是,却不够灵活,同时也不能自由添加控件,因此,本 ... 
- ToolBar与AppcompatAcitivity实现浸入式Statusbar效果
			toolbar是android sdk API21新增的组件,下面是谷歌官方的介绍文档: A standard toolbar for use within application content. ... 
- 1.2、Android Studio为新设备创建一个模块
			模块为你的应用的源码.资源文件和app level设置(比如AndroidManifest.xml)提供了一个容器.每个模块可以独立的构建.测试和调试. 通过使用模块,Android Studio可以 ... 
