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

力扣【四数之和】

 一、题目描述

18. 四数之和

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

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

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

二、题目解析

算法思想:排序+双指针

1、依次固定一个数a;

2、在a后面的区间内,用“三数之和”找到三个数,使用这三个数的和等于target - a即可

同理,对于三数之和的算法:

1、依次固定一个数b;

2、在b后面的区间内,利用“双指针”找到两个数,是这两个数的和等于target - a - b

处理细节问题:

1、不重复

注意这里的去重和三数之和不同,这里需要多一组去重,在确定a时也是需要判断是否重复,其余去重操作和判断三数之和是一样。

2、不漏

与三数之和一样,在找到满足题目条件的一组元素之后,需要继续寻找。

注意:

这里的数据有溢出的风险,不开long long见祖宗~

三、原码

class Solution {
public:vector<vector<int>> fourSum(vector<int>& nums, int target) {vector<vector<int>> ret;//1、先排序sort(nums.begin(),nums.end());//2、利用双指针解决int n = nums.size();for(int i = 0;i<n;){//下面是三数之和for(int j = i+1;j<n;){//防止数据溢出,开long longlong long target2 = (long long)target - nums[i] - nums[j];int left = j+1;int right = n-1;while(left < right){int sum = nums[left] + nums[right];if(sum > target2) right--;else if(sum < target2) left++;else{ret.push_back({nums[i],nums[j],nums[right],nums[left]});left++;right--;//去重left rightwhile(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;}
};

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

相关文章:

  • IMX6LL|linux设备驱动模型
  • 2023年的技术总结和工作反思
  • Stable Diffusion中的Embeddings
  • 如何快速打开github
  • 【sql/python】表中某列值以列表聚合
  • 大模型实战营Day6 作业
  • C#,入门教程(20)——列表(List)的基础知识
  • 【蓝桥杯日记】复盘篇一:深入浅出顺序结构
  • 尚无忧【无人共享空间 saas 系统源码】无人共享棋牌室系统源码共享自习室系统源码,共享茶室系统源码
  • SQL Server 恢复软件
  • 奇安信天擎 rptsvr 任意文件上传漏洞复现
  • Linux-nginx(安装配置nginx、配置反向代理、Nginx配置负载均衡、动静分离)
  • 阿里云GPU服务器ECS实例规格详细说明
  • Kafka为什么在消息积压时不能直接通过消费者水平扩容来提升消费速度?
  • “揭秘Maven:如何成为大数据项目的管理能手?“
  • 基于BERT对中文邮件内容分类
  • 【EFCore仓储模式】介绍一个EFCore的Repository实现
  • oracle篇—19c新特性自动索引介绍
  • 稳定性——JE流程
  • 【控制篇 / 分流】(7.4) ❀ 03. 对国内和国际IP网段访问进行分流 ❀ FortiGate 防火墙
  • 01-开始Rust之旅
  • 华南理工大学数字信号处理实验实验一(薛y老师版本)matlab源码
  • 一篇文章看懂云渲染,云渲染是什么?云渲染如何计费?云渲染怎么选择
  • C++进阶--哈希表模拟实现unordered_set和unordered_map
  • Elasticsearch各种高级文档操作
  • 激光无人机打击系统——光束控制和指向系统
  • pycharm import torch
  • flask 与小程序 购物车删除和编辑库存功能
  • 蓝桥杯真题(Python)每日练Day3
  • 结构体大揭秘:代码中的时尚之选(上)