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

代码随想录算法训练营第七天(二)|15.三数之和 18.四数之和

LeetCode 15 三数之和

题目:

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != ji != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

示例 1:

输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
解释:
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。
不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。
注意,输出的顺序和三元组的顺序并不重要。

示例 2:

输入:nums = [0,1,1]
输出:[]
解释:唯一可能的三元组和不为 0 。

示例 3:

输入:nums = [0,0,0]
输出:[[0,0,0]]
解释:唯一可能的三元组和为 0 。

提示:

  • 3 <= nums.length <= 3000
  • -105 <= nums[i] <= 105

思路:

首先分析题目:就是三个数相加等于0,并且同一个数在这个三元组里面只能用一次,并且最后要去重。

       先对数组进行排序然后我们固定一个数a,这个数后面的区间,通过两个下标来进行遍历,如果left和right位置所指向的数据的和等于固定的数的相反数,即这三个数的和为零时我们就将这个三元组给push到我们的返回数组中去,然后进行去重

上代码!

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {// 排序sort(nums.begin(), nums.end());vector<vector<int>> ans;for (int i = 0; i < nums.size() - 2; i++) {// i重复就直接跳过if (i > 0 && nums[i] == nums[i - 1]) {continue;}// 如果i>0,无解if (nums[i] > 0) {break;}// left的下一个位置,right指向最后一个位置int left = i + 1;int right = nums.size() - 1;// 遍历数组while (left < right) {int sum = nums[left] + nums[right];if (sum == (0 - nums[i])) {ans.push_back({nums[i], nums[left], nums[right]});left++;right--;// 过滤while (left < right && nums[left] == nums[left - 1]) {++left;}while (left < right && nums[right] == nums[right + 1]) {--right;}}if (sum > (0 - nums[i])) {right--;}if (sum < (0 - nums[i])) {left++;}}}return ans;}
};


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:

输入: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]]

思路:

这题,暂时性放弃!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • day17-权限管理
  • IDEA左下角不显示本地修改的localChanges信息-git
  • Oracle认证1Z0-071线上考试注意事项
  • 关于keil程序无法进入main函数问题
  • 未来已来:全方位掌握【人工智能】的系统学习路线
  • 基于JSP的列车票务信息管理系统
  • sql常用语法总结
  • 【Mysql】第四章 数据类型(数值+字符串+日期+enum+set)
  • 决策树可解释性分析
  • 【wsl】wsl + vscode 中使用 typora 打开 markdown 文件
  • 简单搭建dns服务器
  • 浅学 Pytorch
  • C++协助完成返回值优化
  • 【python学习】Python中的 `json.dump` 和 `json.dumps` 的区别和用法解析
  • 深度学习入门(一):感知机与输入数据
  • JavaScript-如何实现克隆(clone)函数
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 2017 前端面试准备 - 收藏集 - 掘金
  • Flex布局到底解决了什么问题
  • Javascript Math对象和Date对象常用方法详解
  • JavaScript类型识别
  • JAVA并发编程--1.基础概念
  • js对象的深浅拷贝
  • Lucene解析 - 基本概念
  • Nacos系列:Nacos的Java SDK使用
  • Objective-C 中关联引用的概念
  • 动态规划入门(以爬楼梯为例)
  • 聊聊flink的BlobWriter
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 排序算法学习笔记
  • 使用agvtool更改app version/build
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 延迟脚本的方式
  • 一些关于Rust在2019年的思考
  • 云大使推广中的常见热门问题
  • 怎样选择前端框架
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​什么是bug?bug的源头在哪里?
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #Datawhale AI夏令营第4期#AIGC方向 文生图 Task2
  • #define 用法
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (转)3D模板阴影原理
  • (转)大道至简,职场上做人做事做管理
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET Remoting学习笔记(三)信道
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .netcore 获取appsettings