【二分查找】18. 四数之和

18. 四数之和

解题思路

  • 外围的四数之和(fourSumTarget 方法):
    • 首先对输入数组nums进行排序,这样可以方便后面进行双指针搜索,同时也有助于去除重复的元组。
    • 遍历排序好的数组,固定第一个数nums[i]然后对剩余的部分进行三数之和的搜索。
    • 每次找到三数之和的结果(temp)后,将固定的数nums[i]添加到每个三元组中,转换成一个四元组并加入最终结果res中。
    • 在每次循环的最后,移动指针i跳过相同的元素,以防止四元组重复。
  • 中间层的三数之和(threeSum 方法):
    • 从指定的start位置开始遍历,固定第一个数nums[i],然后在剩余数组中寻找两个数其和为target - nums[i]。
    • 通过调用twoSumTarget方法来找出所有满足条件的两数之和的组合temp。
    • 将每个找到的组合temp转换成三元组,将固定的数nums[i]添加进去。
    • 同样的,移动指针i跳过重复元素,以防重复的三元组。
  • 最内层的两数之和(twoSumTarget 方法):
    • 使用双指针方法来找出所有和为给定target的两个数,这里的target是由threeSum方法传递下来的目标和。
    • 通过左右指针left和right在排序数组中向中间搜索,当找到两数之和等于目标时,记录这一对数到结果列表。
    • 与前两个方法相同,对左右指针分别向内移动以跳过重复的元素,防止结果集中出现重复的组合。
class Solution {// 转换为三数之和 在转换为两数之和List<List<Integer>> res = new ArrayList<>();public List<List<Integer>> fourSum(int[] nums, int target){return fourSumTarget(nums,(long)target);}public List<List<Integer>> fourSumTarget(int[] nums, long target) {// 首先对数组进行排序Arrays.sort(nums);int n = nums.length;for(int i = 0; i < n; i++){List<List<Integer>> temp = threeSum(nums,i+1,target - (long)nums[i]);// 添加元素 成为三元组for(List<Integer> t: temp){t.add(nums[i]);res.add(t);}// 去除第一个重复元素while(i < n - 1 && nums[i] == nums[i+1]){i++;}}return res;}public List<List<Integer>> threeSum(int[] nums, int start,long target){int n = nums.length;List<List<Integer>> result = new ArrayList<>();for(int i = start; i < n; i++){// 满足条件的temp 不止一个List<List<Integer>> temp = twoSumTarget(nums,i+1,target - (long)nums[i]);// 添加元素 成为三元组for(List<Integer> t: temp){t.add(nums[i]);result.add(t);}// 去除第一个重复元素while(i < n - 1 && nums[i] == nums[i+1]){i++;}}return result;}public List<List<Integer>> twoSumTarget(int[] nums, int start,long target){int n = nums.length;List<List<Integer>> result = new ArrayList<>();int left = start;int right = n - 1;long t = target;while(left < right){long sum = (long)nums[left] + (long)nums[right];long l = nums[left];long r = nums[right];if(sum == t){List<Integer> a = new ArrayList<>();a.add(nums[left]);a.add(nums[right]);result.add(a);// 去除重复的元素while(left < right && nums[left] == l){left++;}// 去除重复元素while(left < right && nums[right] == r){right--;}}else if(sum < t){while(left < right && nums[left] == l){left++;}}else if(sum > t){while(left < right && nums[right] == r){right--;}}}return result;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/687582.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

交流非线性RCD负载的工作原理

非线性电阻电容电感&#xff08;RCD&#xff09;负载是一种常见的电子元件&#xff0c;广泛应用于各种电子设备中。它的主要作用是限制电流的快速变化&#xff0c;保护电路中的其他元件不受过大的电压或电流冲击。 非线性RCD负载的工作原理主要基于其电阻、电容和电感的特性。当…

js-后端返回参数前端动态切换样式

1.js枚举 // 枚举-js //对应的icon显示 EnumUtil.Type { COMMON: 1, BUY: 2, PRODUCE: 3} 2.动态公共样式组件 <!-- 公共组件-显示对应icon --> <template><div v-html"TaskIcon(statues)" class"pro_set_task"></div> </t…

C#学习(十三)——多线程与异步

一、什么是线程 程序执行的最小单元 一次页面的渲染、一次点击事件的触发、一次数据库的访问、一次登录操作都可以看作是一个一个的进程 在一个进程中同时启用多个线程并行操作&#xff0c;就叫做多线程 由CPU来自动处理 线程有运行、阻塞、就绪三态 代码示例&#xff1a; cl…

使用Autodl云服务器或其他远程机实现在本地部署知识图谱数据库Neo4j

本篇博客的目的在于提高读者的使用效率 温馨提醒&#xff1a;以下操作均可在无卡开机状态下就可完成 一.安装JDK 和 Neo4j 1.1 ssh至云服务器 打开你的pycharm或者其他IDE工具或者本地终端&#xff0c;ssh连接到autodl的服务器。(这一步很简单如下图) 1.2 安装JDK 由于我…

12 个顶级音频转换器软件(免费)

当涉及不受支持的音乐文件时&#xff0c;音频文件转换器软件总是会派上用场。当您希望缩小大量大型音乐文件的大小以节省设备存储空间时&#xff0c;它也很有帮助。您在寻找传输音频的软件吗&#xff1f;好吧&#xff0c;请仔细选择音频转换器&#xff0c;因为最好的音乐转换器…

C++之内存对齐

目录 内存对齐 一、内存对齐解释 二、为什么要内存对齐&#xff1f; 三、内存对齐的三大规则 3.1、数据成员对齐规则 3.2、结构(或联合)的整体对齐规则 3.3、结构体作为成员 3.4、代码例子 内存对齐 一、内存对齐解释 对齐规则是按照成员的声明顺序&#xff0c;依次安排…

leetcode-top100回溯算法

组合总和 题目链接 39. 组合总和 - 力扣&#xff08;LeetCode&#xff09; 解题代码 class Solution:def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:def dfs(candidates,begin,size,path,res,target):if target < 0:returnif ta…

【大模型 数据增强】无监督关系抽取任务的新方法

【大模型 数据增强】无监督关系抽取任务的新方法 提出背景解法&#xff1a;多样性正样本对增强&#xff08;AugURE&#xff09;特征1&#xff1a;句内正样本对增强特征2&#xff1a;跨句正样本对提取特征3&#xff1a;使用边界敏感损失函数 医学场景&#xff1a;自动抽取药物-疾…

软件实例分享,家具生产出库管理系统软件教程

软件实例分享&#xff0c;家具生产出库管理系统软件教程 一、前言 以下软件程序教程以 佳易王家具行业生产出库管理系统软件V16.1为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 销售管理——产品状态查询变更&#xff0c;可以根据生产进度变更…

作为项目经理,PMP值得考嘛?最近PMP变数特别大,你还看好PMP嘛?

做项目管理的话&#xff0c;自然是值得考的&#xff0c;现在PMP几乎是项目管理的必考证书了&#xff0c;找工作需要PMP优先&#xff0c;做项目也要求PMP&#xff0c;做项目相关工作的建议去看一个 一、先给大家分析一下PMP 证书的使用场景 1、项目管理岗位招聘的门槛 PMP 是项…

房产证翻译,证件类翻译公司推荐

随着全球化的发展&#xff0c;证件类翻译在我们的生活中越来越常见。其中&#xff0c;房产证翻译是尤为重要的一种。它不仅关乎到个人的财产权益&#xff0c;更在留学、移民、财产公证以及办理贷款等关键场合起到举足轻重的作用。那么&#xff0c;如何做好房产证证件类翻译&…

【stm32】DAC输出三角波锯齿波

【stm32】DAC输出三角波锯齿波及任意波形 导入DAC.ioc&#xff08;见上节DAC学习笔记&#xff09; DAC输出三角波 CubeMX图形化配置 DAC配置 实现0.1ms定时周期 时钟树配置 程序编写 /* USER CODE BEGIN Includes */ #include "lcd.h" /* USER CODE END Inc…

《Go 简易速速上手小册》第3章:数据结构(2024 最新版)

文章目录 3.1 数组与切片&#xff1a;Go 语言的动态队伍3.1.1 基础知识讲解3.1.2 重点案例&#xff1a;动态成绩单功能描述实现代码扩展功能 3.1.3 拓展案例 1&#xff1a;数据分析功能描述实现代码扩展功能 3.1.4 拓展案例 2&#xff1a;日志过滤器功能描述实现代码扩展功能 3…

DBProxy sh bootstrap.sh失败

记录DBProxy安装问题 configure: error: mysql_config is not found, use $ ./configure --with-mysql/path/to/mysql_config 修改configure文件 增加MYSQL_CONFIG/usr/local/mysql&#xff0c;指定mysql安装目录

论文阅读_语音识别_Wisper

英文名称: Robust Speech Recognition via Large-Scale Weak Supervision 中文名称: 通过大规模弱监督实现鲁棒语音识别 链接: https://proceedings.mlr.press/v202/radford23a.html 代码: https://github.com/openai/whisper 作者: Alec Radford, Jong Wook Kim, Tao Xu, Greg…

gifshot-plus配置参数说明

gifshot-plus将视频或者多张图片生成gif图 安装&#xff1a;npm i gifshot-plus 引入&#xff1a;import gifshot from gifshot-plus 使用&#xff1a; gifshot.createGIF(options,(obj) > {if (!obj.error) {console.log("gif image url: ", obj.image);} el…

vue2+高德地图web端开发(二)

前言&#xff1a; 高德地图输入提示与 POI 搜索相关文档&#xff1a;输入提示与 POI 搜索-服务插件和工具-进阶教程-地图 JS API 2.0 | 高德地图API (amap.com) 输入提示-输入提示-示例中心-JS API 2.0 示例 | 高德地图API (amap.com) 创建输入框&#xff1a; 引入Element组…

2402C++,偷窥C++未来的反射

原文 在此体验. 只需要包含#include <experimental/meta>. #include <experimental/meta> int main() {constexpr auto r ^int;typename[:r:] x 42;// : int x 42;typename[:^char:] c *;// : char c *; }选择成员 这是一个操作成员的小示例: struct S { …

渲染案例 |《甲辰春来,福暖四季》蓝海创意云助力央视新闻频道打造2024龙年除夕视觉盛宴

随着2024年甲辰龙年的脚步渐近&#xff0c;中央广播电视总台新闻频道精心策划的除夕特别节目《甲辰春来&#xff0c;福暖四季》于2月9日上午9点准时与全国观众见面。这一场充满传统韵味与现代气息的视觉盛宴&#xff0c;不仅展现了浓厚的节日氛围&#xff0c;更在技术上实现了突…

Halcon 元组/数组基本操作

Halcon 元组/数组基本操作 ** 元组/数组 tuple *******数组创建与字典******* ** 创建一个数组 A : [1,3,45,6] A[0] : 1 A[1] : 2** 定义一个key value字典类型create_dict (DictHandle) set_dict_tuple (DictHandle, test_tuple, A) set_dict_tuple (DictHandle, test_obj, …