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

四数之和(medium)08

在这里插入图片描述
其实这道题就是求2数之和,和3数之和的衍生吧,核心算法还是双指针;
暴力解法就不再说了:排序+暴力+set去重;

直接上:排序+双指针+去重

在这里插入图片描述
大致思路如上图,如果要详细算法过程,可以就看看两数之和和三数之和。
代码实现:

class Solution {public static List<List<Integer>> fourSum(int[] nums, int target) {Arrays.sort(nums);List<List<Integer>> lists =new ArrayList<>();int n=nums.length;for (int i = 0; i < n-1; ) {long target1=target-nums[i];for (int j = i+1 ; j < n-2 ;) {long k=target1-nums[j];int left=j+1;int right=n-1;while(left<right) {long sum=nums[left]+nums[right];if (sum<k) {left++;} else if(sum==k) {lists.add(new ArrayList(Arrays.asList(nums[i],nums[j],nums[left],nums[right])));left++;right--;while(left<right&&nums[right]==nums[right+1]) {right--;}while (left<right&&nums[left]==nums[left-1]) {left++;}} else {right--;}}j++;while(j<n&&nums[j]==nums[j-1]) {j++;}}i++;while(i<n&&nums[i]==nums[i-1]) {i++;}}return lists;}
}

官方实现:

class Solution
{public List<List<Integer>> fourSum(int[] nums, int target){List<List<Integer>> ret = new ArrayList<>();// 1. 排序Arrays.sort(nums);// 2. 利⽤双指针解决问题int n = nums.length;for(int i = 0; i < n; ) // 固定数 a{// 三数之和for(int j = i + 1; j < n; ) // 固定数 b{// 双指针int left = j + 1, right = n - 1;long aim = (long)target - nums[i] - nums[j];while(left < right){int sum = nums[left] + nums[right];if(sum > aim) right--;else if(sum < aim) left++;else{ret.add(Arrays.asList(nums[i], nums[j], nums[left++],nums[right--]));// 去重⼀while(left < right && nums[left] == nums[left - 1])left++;while(left < right && nums[right] == nums[right + 1])right--;}}// 去重⼆j++;while(j < n && nums[j] == nums[j - 1]) j++;}// 去重三i++;while(i < n && nums[i] == nums[i - 1]) i++;}return ret;}
}

这里最难的是去重和越界细节的去除,一定要画图和调试代码,找出问题。

http://www.lryc.cn/news/461676.html

相关文章:

  • TypeScript中 interface接口 type关键字 enum枚举类型
  • vue3.2实现AES加密解密,秘钥通过API获取,并混淆秘钥,后端thinkphp
  • 简述微服务高可用之Sentinel、Seate
  • 将爱传递 将“服务好”延伸
  • 基于MinIO配置bucket,用于文件下载和浏览
  • Ubuntu 配置 ssh 免密连接、安装Docker、docker-compose
  • C++ -string -常见用法2
  • 为您的 WordPress 网站打造完美广告布局 A5广告单元格插件
  • 前端的AI工具:ChatGPT Canvas与Claude Artifacts对比 -仅仅是OpenAI一个迟来的追赶吗?- 贺星舰五飞试验成功
  • GNU链接器(LD):输出分区类型(NOLOAD、READONLY、DSECT、COPY、INFO、OVERLAY)介绍
  • 【MySQL】表的查询操作——SELECT
  • 天地伟业NVR管理工具EasyNVR平台多个NVR同时管理运行后日志一直在打印error
  • HAL+M4学习记录_7
  • mysql 慢查询日志slowlog
  • 基于AES的遥感图像加密算法matlab仿真
  • MySQL insert 记录后查询是乱码问题分析
  • 字符串算法之AC 自动机(Aho-Corasick Algorithm, 多模式匹配)详细解读
  • YoloV10改进:Block改进|使用ContextAggregation模块改善C2f模块|即插即用
  • 学习之高阶编程str方法
  • FreeRTOS:事件标志组
  • 【高分论文密码】AI赋能大尺度空间模拟与不确定性分析及数字制图
  • 智能摆件(墨水屏)
  • ansible————playbook
  • linux日志分割工具logorate快速验证配置是否有效
  • Unity3D URP画面品质的上限如何详解
  • 风管阻力计算
  • 【redis】redis的多线程和IO多路复用
  • webstorm 编辑器配置及配置迁移
  • Oracle19.25发布,如何打补丁到19.25
  • vue3中,拦截双击事件的第一次点击,写一些逻辑