【Java版:最接近的三数之和】

这篇博客介绍了一个Java程序,用于解决找到数组中三个数的和最接近目标值的问题。博主首先提出使用排序和双指针的方法,通过固定一个数,然后用两个指针从两边向中间移动,不断更新最接近目标值的三数之和。在每次迭代中,比较当前三数之和与目标值的差,并根据差值调整指针位置。最后返回找到的最接近的三数之和。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java版:最接近的三数之和


给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。

提示:一个nums数组中只有一个最接近的结果

在遇到这个问题的时候我首先想到的方法就是利用:排序 + 双指针 进行遍历
①首先在数组nums中确定第一个数字nums[i]
②在nums[i]之后,两端确立
前指针:start = i + 1; 代表第二个元素的下标
后指针:end = nums.length - 1; 代表第三个元素的下标
③设置一个临时变量sum:利用前后指针移动,三数相加,用临时变量sum保存
④设置一个函数getDistance(int sum, int target)

public int getDistance(int sum,int target) {
		return Math.abs(sum - target);//返回三数之和与目标数target的距离
}

展示源码:

// An highlighted block
public class Solution16 {
	
	public static void main(String[]args) {
		Solution16 sol = new Solution16();
		int[] nums = {1,2,3,4,5};
		System.out.println(sol.threeSumClosest(nums, 15));
		
	}
	/*
	 1.思路:
	 (1)首先固定一个数字nums[i]
	 (2)在该固定数字nums[i]之后的两端设置两个指针start和end;
	 (3)设置一个变量sum保存三数之和
	 (4)判断sum与target的差,如果差最小,则返回sum这个结果 
	 * */
	public int threeSumClosest(int[] nums, int target) {
		Arrays.sort(nums);	//确定使用Arrays的sort()方法进行升序排序
		int closer = nums[0] + nums[1] + nums[2];		
		for(int i=0;i<nums.length;i++) {
			//确定的第一个数
			int flag = nums[i]; 
			//开头指针
			int start = i+1;
			//末尾指针
			int end = nums.length-1;
			while(start < end) {
				int sum = (flag + nums[start] + nums[end]);//用于保存三数之和的变量:sum
				if(getDistance(sum,target) < getDistance(closer,target)) {
					closer = sum;
				}
				if(sum > target) {
					end--;
				}else if(sum < target) {
					start++;
				}else {
					return closer;
				}
			}	
		}
		return closer;
	}
	
	public int getDistance(int sum,int target) {
		return Math.abs(sum - target);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值