LeetCode:16. 3Sum Closest(Medium)
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)的更多相关文章
- LeetCode:39. Combination Sum(Medium)
1. 原题链接 https://leetcode.com/problems/combination-sum/description/ 2. 题目要求 给定一个整型数组candidates[ ]和目标值 ...
- LeetCode:36. Valid Sudoku(Medium)
1. 原题链接 https://leetcode.com/problems/valid-sudoku/description/ 2. 题目要求 给定一个 9✖️9 的数独,判断该数独是否合法 数独用字 ...
- LeetCode:43. Multiply Strings (Medium)
1. 原题链接 https://leetcode.com/problems/multiply-strings/description/ 2. 题目要求 给定两个String类型的正整数num1.num ...
- LeetCode:49. Group Anagrams(Medium)
1. 原题链接 https://leetcode.com/problems/group-anagrams/description/ 2. 题目要求 给定一个字符串数组,将数组中包含相同字母的元素放在同 ...
- LeetCode:22. Generate Parentheses(Medium)
1. 原题链接 https://leetcode.com/problems/generate-parentheses/description/ 2. 题目要求 给出一个正整数n,请求出由n对合法的圆括 ...
- LeetCode:9. Palindromic Number(Medium)
原题链接:https://leetcode.com/problems/palindrome-number/description/ 1. 题目要求:判断一个int类型整数是否是回文,空间复杂度O(1) ...
- Leetcode 16. 3Sum Closest(指针搜索)
16. 3Sum Closest Medium 131696FavoriteShare Given an array nums of n integers and an integer target, ...
- 《LeetBook》leetcode题解(16):3Sum Closest [M]
我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...
- [LeetCode][Python]16: 3Sum Closest
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 16: 3Sum Closesthttps://oj.leetcode.com ...
随机推荐
- 删除所有正在运行和退出的docker实例
docker ps -a能显示所有docker实例的状态,包含已经退出了的: 加上-q参数,只显示container id 使用这个命令,把docker ps -aq产生的输入作为输入传入到docke ...
- ASP.NET Web API 自定义MediaType实现jsonp跨域调用
代码来自<ASP.NET Web API 2 框架揭秘>一书. 直接上代码: /// <summary> /// 自定义jsonp MediaType /// </sum ...
- transform,animate
1.transform 用来定义变换 IE10及以上支持 示例:transform: rotate | scale | skew | translate |matrix; 一.旋转rotate 正数 ...
- HDU1215 七夕节(模拟 数学)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1215 七夕节 Time Limit: 2000/1000 MS (Java/Others) Me ...
- Storm 出现 no jzmq in java.library.path
在真实环境中运行时,在log日志下,查看workpid日志发现出现该错误. 解决办法: 在conf/storm.yaml添加jzmq安装的路径, 我使用的默认安装在/usr/local/lib下 ja ...
- GoBelieve IOS SDK接入备忘
项目配置 在工程target的"Build Settings"中,找到"Linking"的"Other Linker Flags",添加参数 ...
- center os 创建用户、设置密码、修改用户、删除用户命令
参考:https://www.linuxidc.com/Linux/2017-06/144916.htm useradd testuser 创建用户testuserpasswd testuser ...
- js日期相减得到分钟数
const date1 = new Date(fieldsValue.examStartTime); const date2 = new Date(fieldsValue.examEndTime); ...
- 【TOJ 3660】家庭关系(hash+并查集)
描述 给定若干家庭成员之间的关系,判断2个人是否属于同一家庭,即2个人之间均可以通过这些关系直接或者间接联系. 输入 输入数据有多组,每组数据的第一行为一个正整数n(1<=n<=100), ...
- Vscode配置C++运行环境(2019/1//11更)并加入bits/stdc++.h头文件
因为重装系统,以前配置好的c++环境又没了.所以有要配置一遍. 1 下载mingw64或minw, 配置好环境变量:C://mingw64//bin; 在cmd下用g++ -v验证是否成功. 2. ...