题16、最接近的三数之和

一、题目1

在这里插入图片描述

二、思路

和上一题思路类似,我直接用上一道题的代码改的
这个是上一题的链接

三、代码

import java.util.Arrays;

public class T016 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] nums = {-1, 2, 1, -4 };
		System.out.println( threeSumClosest( nums, 1) );	//2

		int[] nums1 = {1,1,-1,-1,3};
		System.out.println( threeSumClosest( nums1, -1) );	//-1

	}

	public static int threeSumClosest(int[] nums, int target) {

		int result;

		//将result初始化
		if ( nums.length >= 3 )
			result = nums[0]+nums[1]+nums[2];
		else
			return 0;

		//将数组排序
		Arrays.sort( nums );

		//按照顺序遍历所有数
		for ( int k = 0; k < nums.length-2; k++ ){

			//l和r分别指向剩余所有数的最小值和最大值
			int l = k+1, r = nums.length-1;

			//从两边到中间,依次遍历,得到最小值是nums[k]的所有数对
			while ( l < r ){

				int tmp = nums[k] + nums[l] + nums[r];

				//判断结果是否更优
				if ( Math.abs( tmp-target ) < Math.abs( result-target ) )
					result = tmp;

				//三数之和偏大,r减一
				if ( tmp > target ){
					r--;
				//三数之和偏小,l加一
				}else{
					l++;
				}
			}
		}

		return result;
	}
}

  1. 来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/3sum-closest
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 ↩︎

发布了48 篇原创文章 · 获赞 1 · 访问量 855

猜你喜欢

转载自blog.csdn.net/weixin_45980031/article/details/104137642
今日推荐