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

leecode18 四数之和

在这里插入图片描述

我的思路

感觉四数之和和三数之和没什么区别,就将其转化为三数,再转换为两数,就是再三数之和外面再套一层循环而已。

  • 这个题的难点在于,这个h,i,j,k四个参数,我们如何编写代码,能够实现去重操作
    |h和i都是外层循环,我们要再循环开始要对其进行去重,j和k是内部代码和三数之和的去重方式一样。
    而i的去重和h有关,不再像是三数之和的那样,当i大于0的时候就可以去重了。
  • 这个题还有一个需要注意的地方就是这个类型转换,这个四个数的和超出了这个int的范围,所以我们需要在四数相加的地方进行强制类型转换。
public List<List<Integer>> fourSum(int[] nums, int target) {//感觉四数之和和三数之和没什么区别,就将其转化为三数,再转换为两数Arrays.sort(nums);int n = nums.length;List<List<Integer>> ans = new ArrayList<>();for(int h = 0; h<n-3;h++){if(h>0&&nums[h]==nums[h-1]){continue;}if((long)nums[h]+nums[h+1]+nums[h+2]+nums[h+3]>target){break;}if((long)nums[h]+nums[n-1]+nums[n-2]+nums[n-3]<target){continue;}for(int i = h+1;i<n-2;i++){if(i>h+1&&nums[i]==nums[i-1]){continue;}int j  = i+1;int k = n-1;while(j<k){long x = (long) nums[h]+nums[i]+nums[j]+nums[k];if(x<target){j++;}else if(x>target){k--;}else {ans.add(Arrays.asList( nums[h],nums[i],nums[j],nums[k]));j++;while(j<k&&nums[j]==nums[j-1]) j++;k--;while(j<k&&nums[k]==nums[k+1]) k--;}}}}return ans;
}

灵神的思路

灵神的思路和我一样,只不过他比我多优化了,我只在h的循环中进行了优化,灵神再i的循环中也进行了优化。

for (int b = a + 1; b < n - 2; b++) { // 枚举第二个数long y = nums[b];if (b > a + 1 && y == nums[b - 1]) continue; // 跳过重复数字if (x + y + nums[b + 1] + nums[b + 2] > target) break; // 优化一if (x + y + nums[n - 2] + nums[n - 1] < target) continue; // 优化二
作者:灵茶山艾府
链接:https://leetcode.cn/problems/4sum/solutions/2344514/ji-zhi-you-hua-ji-yu-san-shu-zhi-he-de-z-1f0b/
http://www.dtcms.com/a/308366.html

相关文章:

  • 个股期权合约期内遇到标的停牌,如何处置?
  • DoRA详解:从LoRA到权重分解的进化
  • Redis线程模型讨论
  • 修改VSCode远程SSH的PATH
  • JVM字节码文件结构剖析
  • JVM学习日记(十二)Day12
  • 解释 MySQL 中的 EXPLAIN 命令的作用和使用场景
  • 格雷希尔G25F系列电气端口快速封堵接头,解决电池包、电机控制器等壳体的气密性测试难题,提升效率与可靠性,助力新能源汽车生产。
  • ARM--中断
  • 三坐标测量仪攻克深孔检测!破解新能源汽车阀体阀孔测量难题
  • 雷霆战机游戏代码
  • ABS系统专用磁阻式汽车轮速传感器
  • 建设公司如何优化梳理部门职责,提高运作效率?
  • 中烟创新自研【烟草行政许可文书制作系统】纳入“北京市人工智能赋能行业发展典型案例集”
  • 电子电气架构 --- 车载48V系统
  • 如何导入json文件到数据库
  • 生信技能76 - 根据SNP列表提取SNP位点上下游的参考基因组fasta
  • RocksDB关键设计详解
  • MySQL 45讲 16-17
  • 【Linux网络编程】网络层协议 - IP
  • 大模型微调工具LLaMA-Factory的安装流程
  • Git Pull 时遇到 Apply 和 Abort 选项?详解它们的含义与应对策略
  • sqli-labs:Less-16关卡详细解析
  • 数字通信原理--数字通信仿真基础
  • 基于C++的protobuf协议使用(四)项目应用与总结
  • 学以致用——用Docker搭建ThinkPHP开发环境
  • freesurfer处理图谱和被试的脑模版对齐的操作
  • realm数据库RealmObject的作用
  • 电子电气架构 --- 车载48V系统开辟全新道路
  • 神奇的数据跳变