当前位置: 首页 > news >正文

优化:三数之和,最接近的三数之和

三数之和

点击查看代码
class Solution {public List<List<Integer>> threeSum(int[] nums) {Arrays.sort(nums);          int n = nums.length;List<List<Integer>>  res = new ArrayList<>();//优化1:如果第一个大于0,直接终结if(nums[0] > 0){return res;}for(int i = 0 ; i < n - 2 ; i++){int x = nums[i];if(i != 0 && nums[i] == nums[i-1]){continue;}//优化2:如果前面三个加起来大于0,直接breakif(x + nums[i] + nums[i+1] >0){break;}//优化3:如果x加上最后两个数小于0,直接continueif(x + nums[n-1] + nums[n-2] < 0){continue;}int l = i + 1;int r = n - 1;while(l < r){int sum = x + nums[l] + nums[r];if(sum == 0){res.add(new ArrayList<>(Arrays.asList(x, nums[l],nums[r])));l++;while(l < r && nums[l] == nums[l-1]){l++;}r--;while(l < r && nums[r] == nums[r+1]){r--;}}else if(sum < 0){l++;}else{r--;}}}return res;}
}

最接近的三数之和

class Solution {
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int n = nums.length;
int diff = Integer.MAX_VALUE;
int res = 0;
for(int i = 0 ; i < n - 2; i++){
int x = nums[i];
if(i != 0 && nums[i] == nums[i-1]){
continue;
}
//优化1:如果有三个数大于target,直接break.后面无论怎么选和都不会比这个s还小
int s = x + nums[i+1] + nums[i+2];
if(s > target){
if(s-target < diff){
res = s;
}
break;
}
//优化2:x加上后面任意两个数都不超过target,直接continue,不需要跑双指针了.
s = x + nums[n-2] + nums[n-1];
if(s < target){
if(target-s < diff){
diff = target - s;
res = s;
}
continue;
}
int l = i+1;
int r = n-1;
while(l < r){
int sum = x + nums[l] + nums[r];
if(sum == target){
return sum;
}
if(sum - target >0){
if(sum - target < diff){
diff = sum - target;
res = sum;
}
r--;
while(l < r && nums[r] == nums[r+1]){
r--;
}
}
else{
if(target - sum < diff){
diff = target - sum;
res = sum;
}
l++;
while(l < r && nums[l] == nums[l-1]){
l++;
}
}
}
}
return res;
}
}

http://www.gsyq.cn/news/123067.html

相关文章:

  • FFmpeg 关键的结构体
  • [Non] - 选举
  • GitCode项目创建分支并提交代码
  • 修改 OBS-Studio 的字体
  • Linux上位机Windows上位机C++(QT)开发三菱上位机MC 1E 二进制通信 源码 C++快速实现三菱 MC 1E 二进制 支持三菱FX和A系列PLC A-1E 帧 国产化系统上位机
  • 1d 人工势场法路径规划Matlab代码实战
  • 图论
  • Python - dataclass
  • 云计算与边缘计算:未来数字化转型的关键驱动力 - 实践
  • 文献可视化分析期末复习与应用研究:基于知识图谱的核心概念与实践方法探讨
  • SIGSEGV段错误排查全攻略
  • AI元人文构想的理论构建过程与深层意义分析(二)
  • C++输入输出(cin和cout)的用法
  • 实用指南:LeetCode算法日记 - Day 107: 最长重复子数组
  • 【Agent】MemOS 源码笔记---(6)---MemScheduler -- 总体
  • 三菱PLC与组态王打造饮料自动装箱机控制系统
  • 【Nature Communications‘24‘06】预训练多模态大语言模型经过 SkinGPT-4 提升皮肤病学诊断能力
  • 品牌营销战略策划公司选哪家靠谱?奇正沐古 - 资讯焦点
  • 幻方的 “已知” 与 “未知”:三阶唯一解、多阶构造及未解之谜
  • 宪法守护童年:向霸凌和诈骗说“不” - 资讯焦点
  • Neo4j启动
  • 2025年郑州头部吊顶式空调机组设计多少钱,空气幕/表冷器/卧式暗装风机盘管/吊顶式空调机组/工业暖风机吊顶式空调机组采购找哪家 - 品牌推荐师
  • 2025年嘉兴排行前列的卧式暗装风机盘管采购多少钱,卡式风机盘管/吊顶式空调机组/空气幕/消防排烟防火阀卧式暗装风机盘管采购怎么选择 - 品牌推荐师
  • 无代码解决方案:解锁数字化转型的普惠路径
  • Oracle索引技术:理论与实操全解析
  • 深入理解Golang并发模型与CSP理论
  • 23、Samba使用与SSL配置全解析
  • 人工智能如何改变 Anthropic 的工作方式
  • 代码之恋(第十四篇:分叉的路径与意外的Push)
  • SpringSecurity授权原理与实战