1. 原题链接

https://leetcode.com/problems/3sum-closest/description/

2. 题目要求

数组S = nums[n]包含n个整数,找出S中三个整数a,b,c,使得a+b+c=sum,sum最接近给定的目标整数target,返回sum。

3. 解题思路

采用与第15题相同的思路(第15题链接),不过要引入两个整型变量min和result。

min用来保存当前sum和target的最小差值

result用来保存最小差值时的sum,最终的result也就是我们需要返回的结果。

当sum和target一致时,直接返回sum。

4. 代码实现

import java.util.Arrays;

public class ThreeSumClosest {
public static void main(String[] args) {
int[] nums = {-1, 2, 1, 4};
System.out.println(ThreeSumClosest.threeSumClosest(nums, 1));
} public static int threeSumClosest(int[] nums, int target) {
// 先进行排序
Arrays.sort(nums);
int sum = 0, result = 0, min = Integer.MAX_VALUE; // min为target和sum之间的差值
for (int i = 0; i < nums.length - 2; i++) {
int l = i + 1, r = nums.length - 1;
if (i == 0 || (i > 0 && nums[i] != nums[i - 1])) {
while (l < r) {
sum = 0; // 将sum清零
sum = nums[i] + nums[l] + nums[r];
if (target - sum == 0) { // 如果直接与目标值相等,直接返回
return sum;
} else if (target - sum > 0) {
if ((target - sum) < min) {
min = target - sum;
result = sum;
}
while (l < r && nums[l] == nums[l + 1]) l++; // 跳过重复的值
l++;
} else {
if ((sum - target) < min) {
min = sum - target;
result = sum;
}
while (l < r && nums[r] == nums[r - 1]) r--; // 跳过重复的值
r--;
}
}
} } return result;
}
}

  

LeetCode:16. 3Sum Closest(Medium)的更多相关文章

  1. LeetCode:39. Combination Sum(Medium)

    1. 原题链接 https://leetcode.com/problems/combination-sum/description/ 2. 题目要求 给定一个整型数组candidates[ ]和目标值 ...

  2. LeetCode:36. Valid Sudoku(Medium)

    1. 原题链接 https://leetcode.com/problems/valid-sudoku/description/ 2. 题目要求 给定一个 9✖️9 的数独,判断该数独是否合法 数独用字 ...

  3. LeetCode:43. Multiply Strings (Medium)

    1. 原题链接 https://leetcode.com/problems/multiply-strings/description/ 2. 题目要求 给定两个String类型的正整数num1.num ...

  4. LeetCode:49. Group Anagrams(Medium)

    1. 原题链接 https://leetcode.com/problems/group-anagrams/description/ 2. 题目要求 给定一个字符串数组,将数组中包含相同字母的元素放在同 ...

  5. LeetCode:22. Generate Parentheses(Medium)

    1. 原题链接 https://leetcode.com/problems/generate-parentheses/description/ 2. 题目要求 给出一个正整数n,请求出由n对合法的圆括 ...

  6. LeetCode:9. Palindromic Number(Medium)

    原题链接:https://leetcode.com/problems/palindrome-number/description/ 1. 题目要求:判断一个int类型整数是否是回文,空间复杂度O(1) ...

  7. Leetcode 16. 3Sum Closest(指针搜索)

    16. 3Sum Closest Medium 131696FavoriteShare Given an array nums of n integers and an integer target, ...

  8. 《LeetBook》leetcode题解(16):3Sum Closest [M]

    我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...

  9. [LeetCode][Python]16: 3Sum Closest

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 16: 3Sum Closesthttps://oj.leetcode.com ...

随机推荐

  1. (转)C++11使用emplace_back代替push_back (其中有关于右值引用)

    最近在写一段代码的时候,突然很好奇C++11中对push_back有没有什么改进以增加效率,上网搜了一些资料,发现果然新增了emplace_back方法,比push_back的效率要高很多. 首先,写 ...

  2. 基于Qt的相似QQ好友列表抽屉效果的实现

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/shuideyidi/article/details/30619167     前段时间在忙毕业设计, ...

  3. Django:模板系统

    一,常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 二,常量 {{ 变量名 }} 变量名由字母数字和下划线组成. 点(.)在模板语言中有特殊 ...

  4. POJ 2942 圆桌骑士

    之前做过这个题目,现在回想起来,又有新的柑橘. 求必须出去的骑士人数. 每一个双连通分量,如果是一个奇圈,那么一定是二分图染色失败. 依次遍历每个双连通分量,但是,对于邻接表中,有一些点不是双连通分量 ...

  5. The Child and Zoo 题解

    题目描述 Of course our child likes walking in a zoo. The zoo has n areas, that are numbered from 1 to n. ...

  6. mac下登录服务器

    1.先通过帐号密码登录到服务器: ssh 用户名@服务器地址 https://jingyan.baidu.com/article/546ae1853132bf1148f28c42.html 2.登录后 ...

  7. 【转】 Android Fragment 真正的完全解析(下)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37992017 上篇博客中已经介绍了Fragment产生原因,以及一些基本的用法和 ...

  8. 融云SDK:获取用户Token的方法

    融云SDK查看ServerAPI里面有个获取Token的方法,本以为只要传三个参数就可以.后来发现,在请求头有几个必须要传的参数,否则服务器返回401(未授权).拿获取Token接口为例子 如图所示, ...

  9. 去除a标签的下划线

    a:link ,a:visited,a:hover,a:active { text-decoration: none;}

  10. Mysql索引学习笔记

    1.btree索引与hash索引 下列范围查询适用于 btree索引和hash索引: SELECT * FROM t1 WHERE key_col = 1 OR key_col IN (15,18,2 ...