Leetcode刷题100天—16. 最接近的三数之和( 排序)—day30
Posted 神的孩子都在歌唱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode刷题100天—16. 最接近的三数之和( 排序)—day30相关的知识,希望对你有一定的参考价值。
前言:
作者:神的孩子在歌唱
大家好,我叫运智
16. 最接近的三数之和
难度中等874收藏分享切换为英文接收动态反馈
给定一个包括 n 个整数的数组 nums
和 一个目标值 target
。找出 nums
中的三个整数,使得它们的和与 target
最接近。返回这三个数的和。假定每组输入只存在唯一答案。
示例:
输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。
提示:
3 <= nums.length <= 10^3
-10^3 <= nums[i] <= 10^3
-10^4 <= target <= 10^4
package 排序;
import java.util.Arrays;
import javax.imageio.ImageTypeSpecifier;
public class _16_最接近的三数之和 {
public static int threeSumClosest(int[] nums, int target) {
// 一言不和先排序
Arrays.sort(nums);
// 定义返回数
int ans=nums[0]+nums[1]+nums[2];
// 定义指针
int left=0,right=nums.length-1;
if (nums.length<=2) {
return ans;
}
while(right-left>=2) {
int pivot=left+1;
while(pivot<right) {
int sum=nums[left]+nums[right]+nums[pivot];
// 如果前一个数和后一个数相等就跳出重复
if (pivot>left+1&&nums[pivot]==nums[pivot-1]) {
pivot++;
continue;
}
// 否则如果sum大于target右边指针往左移
else if(sum>target) {
right--;
}
// 否则pivot往右移
else if(sum<target){
pivot++;
}else {
// 否则就是等于,直接返回
return sum;
}
// 将sum和ans减去target的绝对值进行比较,那个小用哪个
if (Math.abs(target-sum)<Math.abs(target-ans)) {
ans=sum;
}
}
right=nums.length-1;
left++;
}
return ans;
}
public static void main(String args[]) {
int[] nums= {-1,2,1,-4};
int ans=threeSumClosest(nums, 1);
System.out.println(ans);
}
}
本人csdn博客:https://blog.csdn.net/weixin_46654114
转载说明:跟我说明,务必注明来源,附带本人博客连接。
以上是关于Leetcode刷题100天—16. 最接近的三数之和( 排序)—day30的主要内容,如果未能解决你的问题,请参考以下文章