【算法】【线性表】【数组】最接近的三数之和
1 题目
给一个包含 n
个整数的数组 S
, 找到和与给定整数 target
最接近的三元组,返回这三个数的和。
样例 1:
输入:
numbers = [2,7,11,15]
target = 3
输出:
20
解释:2+7+11=20
样例 2:
输入:
numbers = [-1,2,1,-4]
target = 1
输出:
2
解释:-1+2+1=2
挑战 时间复杂度:O(n^2) ,空间复杂度:O(1)
2 解答
public class Solution { /** * @param numbers: Give an array numbers of n integer * @param target: An integer * @return: return the sum of the three integers, the sum closest target. */ public int threeSumClosest(int[] numbers, int target) { // write your code here int res = Integer.MAX_VALUE; // 1、当数组为空或者不满足3个的长度时返回 if (numbers == null || numbers.length < 3) { return res; } // 排序 Arrays.sort(numbers); // 初始化默认返回 res = numbers[0] + numbers[1] + numbers[2]; int gap = Math.abs(target - res); // 双指针遍历 for (int i = 0; i < numbers.length; i++) { int left = i+1; int right = numbers.length-1; while (left < right) { // 计算三个数的和 int sum = numbers[i] + numbers[left] + numbers[right]; // 如果差距比 gap 小 赋值给res int currenGap = Math.abs(target - sum); if (currenGap < gap) { res = sum; gap = currenGap; } // 如果大于那么 right-- // 如果小于那么 left ++ // 如果相等直接返回 if (sum > target) { right--; } else if (sum < target) { left++; } else { return target; } } } return res; } }
加油。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了