16. 3Sum Closest
Posted skillking
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了16. 3Sum Closest相关的知识,希望对你有一定的参考价值。
一、题目
1、审题
2、分析:
给出一个数字数组,求其中三个元素的和让其最接近 target。
二、解答
1、分析:
a、将数组 nums 排序,遍历数组中元素;
b、遍历下标为 i 的元素时,取 low 指针指向下标为 i + 1 的元素, high 指向数组最后一个元素下标;
c、循环判断 当 low < high 时,令 sum = nums[i] + nums[low] + nums[high] ,比较 sum 是否最接近 target;
若 sum = target , 则返回 target;
若 sum > target, 则 high--;
否则, low--;
class Solution { public int threeSumClosest(int[] nums, int target) { if(nums.length == 0) return 0; Arrays.sort(nums); int result = nums[0] + nums[1] + nums[2]; for (int i = 0; i < nums.length - 2; i++) { // if(nums[i] > target) // break; int low = i + 1, high = nums.length - 1; if((i > 0 && nums[i] != nums[i-1]) || i == 0) { while(low < high) { int sum = nums[i] + nums[low] + nums[high]; if (sum - target == 0) return target; if(Math.abs(sum - target) < Math.abs(result - target)) result = sum; if (sum - target < 0) low++; else high--; } } } return result; } }
以上是关于16. 3Sum Closest的主要内容,如果未能解决你的问题,请参考以下文章