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

四数之和

目录

一:题目链接

二:题目思路

三:代码实现


一:题目链接

        理解题目需要注意,如果两个四元组元素一一对应,则认为两个四元组重复,选择其中一个四元组即可。比如 [ 0 , 1 , 0 ,  2] 和 [ 1  ,  0  ,2, 0 ] ,那么认为这两个四元组是相同的。选择其中一个即可。

二:题目思路

        我i们的思路是 排序 + 固定数字 + 固定数字 + 双指针 来解决。

        首先,将数组排好序后,我们确定一个固定数 a 从 数组起始位置开始 ,另一个固定数 b 从 a 的下一位开始,再定义两个指针 left 和 right ,如图:

        先看固定数 b 和这两个指针,后续思路就是我们之前所讲的 “三数之和” , (务必理解这篇文章后再看下面思路),只不过这里的判断条件改成 nums[left] + nums[right] == target - a - b;并且过程要注意,最外层的固定数 a 也需要去重。所以大致思路也就是 “三数之和” 最外层再套了个 for 循环。

三:代码实现

        //存储结果集List<List<Integer>> ret = new ArrayList<>();//排序数组Arrays.sort(nums);int n = nums.length;//小优化if (n < 4 || (long) nums[0] + nums[1] + nums[2] + nums[3] > target) {return ret;}for (int i = 0; i < n;) { //固定数字 afor (int j = i + 1; j < n;) { //固定数字 blong sum = (long) target - nums[i] - nums[j];int left = j + 1;int right = n - 1;while (left < right) {if ((long) nums[left] + nums[right] < sum) {left++;} else if ((long) nums[left] + nums[right] > sum) {right--;} else {//添加当前符合条件的四元组ret.add(Arrays.asList(nums[i], nums[j], nums[left],nums[right]));left++;right--;while (left < right && nums[left] == nums[left - 1]) {left++;}while (left < right && nums[right] == nums[right + 1]) {right--;}}}//去重 jj++;while (j < n && nums[j] == nums[j - 1]) {j++;}}//去重 ii++;while (i < n && nums[i] == nums[i - 1]) {i++;}}return ret;

        小优化代码解释:如果当前数组元素不够 四个,或者数组最小的四个数加起来都比 target 大,就可以直接返回了。


文章转载自:

http://FvLYAWNe.skbhL.cn
http://Mxe6FSB1.skbhL.cn
http://aCAV4kbH.skbhL.cn
http://d7mgQcAx.skbhL.cn
http://J12zgfdl.skbhL.cn
http://xISeKhX7.skbhL.cn
http://azMGr7d8.skbhL.cn
http://a4mEJjcm.skbhL.cn
http://dWLBcxP0.skbhL.cn
http://PfJxZy40.skbhL.cn
http://HzZpM6nm.skbhL.cn
http://9KEYuF5o.skbhL.cn
http://PaBhEPaS.skbhL.cn
http://TmwAFpyC.skbhL.cn
http://G4lHRs5u.skbhL.cn
http://CljjqpZj.skbhL.cn
http://F7gedKuk.skbhL.cn
http://f1zpK1ea.skbhL.cn
http://vYI8vv32.skbhL.cn
http://2BxJsU7N.skbhL.cn
http://RFhubH0t.skbhL.cn
http://ldaDzkca.skbhL.cn
http://d0XUiqku.skbhL.cn
http://Ej0LBbNq.skbhL.cn
http://uZtHbr15.skbhL.cn
http://p1lNlCYB.skbhL.cn
http://GpBGBIMX.skbhL.cn
http://Mm1vjt3s.skbhL.cn
http://i1ptqyph.skbhL.cn
http://ZwOvMWbW.skbhL.cn
http://www.dtcms.com/a/375385.html

相关文章:

  • MySql案例详解之事务
  • golang 语言核心
  • 【项目】在AUTODL上使用langchain实现《红楼梦》知识图谱和RAG混合检索(二)RAG部分
  • 安卓学习 之 贞布局FrameLayout
  • 【ISP】Charlite工具实操
  • IntelliJ IDEA断点调试全攻略
  • OceanBase存储过程基本使用
  • 使用 OBD 交互式部署单点OceanBase数据库
  • 内存管理这一块
  • 【深度学习新浪潮】什么是具身智能?
  • Linux tc 常用命令总结(网卡限速、延迟、丢包与整形)
  • Windows 命令行:路径末端的反斜杠
  • Shell脚本编程基本认识
  • Redis 面试
  • 大学地理信息科学该如何学习才能好就业
  • 浅谈“SVMSPro视频切片”技术应用场景
  • OpenHarmony多模输入子系统全链路剖析:从HCS配置到HDI芯片驱动源码深度解读
  • 1. linux 下qt 应用开机自启,需要sudo时
  • QML中的Popup
  • Cursor Pro试用
  • shell介绍
  • vla 开源最强的模型是哪一个
  • FreeRTOS任务切换详解
  • 面试不会问题
  • 享元模式,用Qt/C++绘制森林
  • GO RPC 教学文档
  • Atlantis Word Processor:全方位的文字处理专家
  • [iOS] 单例模式的深究
  • 视频通话实现语音转文字
  • String-HashCode源码分析