day30【LeetCode力扣】18.四数之和

day30【LeetCode力扣】18.四数之和

1.题目描述

给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):

  • 0 <= a, b, c, d < n
  • abcd 互不相同
  • nums[a] + nums[b] + nums[c] + nums[d] == target

你可以按 任意顺序 返回答案 。

示例 1:

输入:nums = [1,0,-1,0,-2,2], target = 0
输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]

示例 2:

输入:nums = [2,2,2,2,2], target = 8
输出:[[2,2,2,2]]

提示:

  • 1 <= nums.length <= 200
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109

2.题解

2.1 c++ 【排序+双指针】
class Solution {
public:vector<vector<int>> fourSum(vector<int>& nums, int target) {vector<vector<int>> res;sort(nums.begin(),nums.end());int length = nums.size();for(int i=0; i<length;i++){if(nums[i]>target&&target>0)break;if(i>0&&nums[i]==nums[i-1])continue;for(int j=i+1;j<length;j++){if(nums[i]+nums[j]>target&&target>0)break;if(j>i+1&&nums[j]==nums[j-1])continue;int left=j+1;int right=length-1;while(left<right){// long long s = static_cast<long long>(nums[i]) + nums[j] + nums[left] + nums[right];long s = (long)(nums[i]) + nums[j] + nums[left] + nums[right];if(s==target){res.push_back(vector<int>{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--;left++;right--;}else if(s<target)left++;elseright--;}}}return res;}
};
2.2 python【排序+双指针】
class Solution:def fourSum(self, nums: List[int], target: int) -> List[List[int]]:nums.sort()n = len(nums)res = []for i in range(n):if nums[i]>target and nums[i]>0 and target >0:breakif i>0 and nums[i]==nums[i-1]:continuefor j in range(i+1,n):if nums[i] + nums[j]>target and target>0:breakif j>i+1 and nums[j]==nums[j-1]:continueleft,right = j+1,n-1while left<right:sums = nums[i]+nums[j]+nums[left]+nums[right]if sums==target:res.append([nums[i],nums[j],nums[left],nums[right]])while left < right and nums[left]==nums[left+1]:left+=1while left < right and nums[right]==nums[right-1]:right-=1left+=1right-=1elif sums<target:left+=1else:right-=1return res
2.3 python【字典】
class Solution:def fourSum(self, nums: List[int], target: int) -> List[List[int]]:res_dict = {}for num in nums:res_dict[num]=res_dict.get(num,0)+1ans = set()for i in range(len(nums)):for j in range(i+1,len(nums)):for k in range(j+1,len(nums)):val = target-nums[i]-nums[j]-nums[k]if val in res_dict:count = (nums[i] == val) + (nums[j] == val) + (nums[k] == val)if res_dict[val]>count:ans.add(tuple(sorted([nums[i],nums[j],nums[k],val])))return [list(x) for x in ans]

排序的主要目的是为了避免重复。在这段代码中,将四个元素 [nums[i], nums[j], nums[k], val] 排序后,可以确保不同顺序的相同元素组合被视为同一个组合。这是因为排序后的元组是唯一的,无论元素的原始顺序如何。

具体来说,考虑这样一种情况:假设有两个四元组 (a, b, c, d)(b, c, a, d),它们的元素相同,但顺序不同。如果不排序,它们将被视为不同的项,并且都会被添加到集合 ans 中。而排序后,这两个四元组都会变成 (a, b, c, d),从而确保集合 ans 中不会有重复的项。


ok了,就到这里叭~~~

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

成功并不是最终目的,而是持续努力的结果。

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

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

相关文章

Linux: Mysql环境安装

Mysql环境安装&#xff08;Centos&#xff09; 前言一、卸载多余环境1.1 卸载mariadb1.2 查看并卸载系统mysql和mariadb安装包 二、换取mysql官方yum源三、安装并启动mysql服务3.1 yum源加载3.2 安装yum源3.3 安装mysql服务3.3.1 安装指令3.3.2 GPG密钥问题解决方法3.3.3 查看是…

循环结构(一)——for语句【互三互三】

文章目录 &#x1f341; 引言 &#x1f341; 一、语句格式 &#x1f341; 二、语句执行过程 &#x1f341; 三、语句格式举例 &#x1f341;四、例题 &#x1f449;【例1】 &#x1f680;示例代码: &#x1f449;【例2】 【方法1】 &#x1f680;示例代码: 【方法2】…

【C++ 编程】引用 - 给变量起别名、浅复制

基本语法&#xff1a;数据类型 &别名 原名int a 10; int &b a;引用必须初始化 (❌ int &b;)&#xff0c;初始化后不可改变 (int c 5; b c&#xff1a;b 没有变成c的别名&#xff0c;而是 a、b 对应的值变更为了 c 的值)本质是指针常量, 浅复制 【黑马程序员匠…

Cartographer重入门到精通(二):运行作者demo及自己的数据集

在demo数据包上运行cartographer 现在Cartographer和Cartographer的Ros包已经都安装好了&#xff0c;你可以下载官方的数据集到指定的目录&#xff08;比如在Deutsches Museum用背包采集的2D和3D 数据&#xff09;&#xff0c;然后使用roslauch来启动demo。 注&#xff1a;la…

IO半虚拟化-Virtio学习笔记

参考&#xff1a;《深入浅出DPDK》及大佬们的各种博客 Virtio简介&运行环境 Virtio 是一种用于虚拟化环境中的半虚拟化 I/O 框架&#xff0c;目的是在虚拟机和主机之间提供一种高效的 I/O 机制。关于什么是半虚拟化和全虚拟化&#xff1a;见SR-IOV学习笔记。 YES&#xf…

PDMS二次开发(二十二)——关于1.0.3.1版本升级内容的说明

目录 1.更新内容介绍2.效果演示3.关于重构自动添加焊口功能的说明3.1错误示例 3.问题交流1.创建焊口提示失败2.程序崩溃 1.更新内容介绍 在添加焊口之前先清除当前branch已有焊口&#xff1b;显示清除焊口的个数和添加焊口的个数&#xff1b;重构了自动添加焊口功能&#xff0…

值得关注的数据资产入表

不错的讲解视频&#xff0c;来自&#xff1a;第122期-杜海博士-《数据资源入表及数据资产化》-大数据百家讲坛-厦门大学数据库实验室主办第122期-杜海博士-《数据资源入表及数据资产化》-大数据百家讲坛-厦门大学数据库实验室主办-20240708_哔哩哔哩_bilibili

《A++ 敏捷开发》- 10 二八原则

团队成员协作&#xff0c;利用项目数据&#xff0c;分析根本原因&#xff0c;制定纠正措施&#xff0c;并立马尝试&#xff0c;判断是否有效&#xff0c;是改善的“基本功”。10-12章会探索里面的注意事项&#xff0c;13章会看两家公司的实施情况和常见问题。 如果已经获得高层…

Linq的常用方法

LINQ&#xff08;Language Integrated Query&#xff09;是.NET Framework中用于数据查询的组件&#xff0c;它将查询功能集成到C#等.NET语言中。LINQ提供了丰富的查询操作符&#xff0c;这些操作符可以应用于各种数据源&#xff0c;如内存中的集合、数据库、XML等。以下是一些…

java中的String 以及其方法(超详细!!!)

文章目录 一、String类型是什么String不可变的原因(经典面试题)String不可变的好处 二、String的常用构造形式1.使用常量串构造2.使用newString对象构造3.字符串数组构造 三、常用方法1. length() 获取字符串的长度2. charAt() 获取字符串中指定字符的值 (代码单元)3. codePoin…

水的几个科学问题及引发的思考

水的几个科学问题及引发的思考 两个相同的容器A和B&#xff0c;分别装有同质量的水&#xff0c;然后&#xff0c;在A容器中加入水&#xff0c;在B容器中加入冰&#xff0c;如果加入水和冰的质量相同。问&#xff0c;容器B的水位将与容器A的水位相同吗&#xff08;假设冰未融化时…

Log4j的原理及应用详解(二)

本系列文章简介&#xff1a; 在软件开发的广阔领域中&#xff0c;日志记录是一项至关重要的活动。它不仅帮助开发者追踪程序的执行流程&#xff0c;还在问题排查、性能监控以及用户行为分析等方面发挥着不可替代的作用。随着软件系统的日益复杂&#xff0c;对日志管理的需求也日…

MySQL和SQlServer的区别

MySQL和SQlServer的区别 说明&#xff1a;在一些常用的SQL语句中&#xff0c;MySQL和SQLServer存在有一些区别&#xff0c;后续我也会将我遇到的不同点持续更新在这篇博客中。 1. 获取当前时间 SQLServer&#xff1a; -- SQLServer -- 1.获取当前时间 SELECT GETDATE(); --…

Vue2切换图片小案例

代码中 v-show "index>0",是表示下标只有大于零时上一页按钮才会显示v-show "index<list.length-1",是表示下标只有小于list数组的最大值才会显示&#xff0c;反之隐藏。click "index--"和click "index",是点击按钮后加减数…

【ZooKeeper学习笔记】

1. ZooKeeper基本概念 Zookeeper官网&#xff1a;https://zookeeper.apache.org/index.html Zookeeper是Apache Hadoop项目中的一个子项目&#xff0c;是一个树形目录服务Zookeeper翻译过来就是动物园管理员&#xff0c;用来管理Hadoop&#xff08;大象&#xff09;、Hive&…

AR0132AT 1/3 英寸 CMOS 数字图像传感器可提供百万像素 HDR 图像处理(器件编号包含:AR0132AT6R、AR0132AT6C)

AR0132AT 1/3 英寸 CMOS 数字图像传感器&#xff0c;带 1280H x 960V 有效像素阵列。它能在线性或高动态模式下捕捉图像&#xff0c;且带有卷帘快门读取。它包含了多种复杂的摄像功能&#xff0c;如自动曝光控制、开窗&#xff0c;以及视频和单帧模式。它适用于低光度和高动态范…

QML界面控件加载与显示顺序

一、QML界面控件加载顺序 QML在界面加载时的顺序和我们认知的有很大的不同&#xff0c;有时候会对我们获取参数以及界面实现造成很大的困扰 1、加载顺序 import QtQuick 2.12 import QtQml 2.12 import QtQuick.Window 2.12 import QtQuick.VirtualKeyboard 2.4Window {id: …

Open3D点云算法与点云深度学习案例汇总(长期更新)

目录 引言 Open3D算法汇总 Open3D快速安装 测试点云资料 一、点云的读写与显示 二、KD tree和八叉树的应用 三、点云特征提取 四、点云滤波算法 五、点云配准算法 六、点云分割算法&#xff08;待更新&#xff09; 七、常用操作 八、数据转换 九、常用小工具 三维…

交换机的二三层原理

相同VLAN的交换机交换原理&#xff08;二层交换原理&#xff09;&#xff1a; 交换机收到数据帧&#xff0c;首先会检查数据帧的VLAN标签和目标MAC&#xff0c;若属于相同VLAN&#xff0c;且该目标MAC在本地MAC表中&#xff0c;则直接根据出接口进行数据转发 不同VLAN的交换机…

九盾安防:如何调控叉车限速器的报警速度呢

在繁忙的物流仓储和制造业环境中&#xff0c;叉车是不可或缺的搬运设备。然而&#xff0c;其高速行驶也带来了潜在的安全隐患。为了确保作业人员和货物的安全&#xff0c;又车限速器的设置显得尤为关键。那么&#xff0c;如何调控叉车限速器的报警速度呢? 叉车限速器的速度调整…