代码随想录算法(哈希表二)

news2024/12/25 2:04:03

目录

454四数相加

15三数之和

双指针法

18四数之和

剪枝操作


454四数相加

暴力操作就是四个for循环

这个题目是用哈希表来解答 我们可以将a+b进行一个遍历放到一个数组里面 再将c+d来放到一个数组中 来看一下是否c+d中有a+b所需要的值

由于这个题目是int这种 所以只能从set 和map中进行选hash

但是又由于我们不仅要统计a+b里面有没有出现过  还要统计一下出现的次数 这样的话我们就需要hashmap

在遍历a+b数组的时候我们将a+b的值存储为key并且将出现的次数作为value

在遍历c+d的数组的时候 我们判断0-(c+d)有没有在上面那个集合中出现过没有 出现过的话将次数记录

这样两个for循环 时间复杂度就是n的平方

a+b假如出现了三次五 下面出现了一次5 那么这样的话就是有三个四元组

c++使用unordermap 接下来遍历a+b 

接着遍历c+d target=0-(c+d)

id判断map中是否出现过这个target 出现过的话count加上key对应的数值

null. - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/4sum-ii/solutions/499745/si-shu-xiang-jia-ii-by-leetcode-solution

15三数之和

这个题目用哈希法比较复杂 因为需要去重

双指针法

使用双指针的时候一定要对数组先排序 因为他没要求返回下标 只要求返回值

定义一个i left right分别代表a b c

这边先固定i

假设num[i]+num[left]+num{right]>0这样的话需要right向里移动一位 right--

如果三个数相加小于0的话 需要left++

如果等于0的话就是结果 把它加到result二维数组中

这边的细节就是去重 abc三个数都需要去重

我们首先定义一个result存放我们的结果集 对数组排序

遍历这个数组if(number[i]>0)则可以直接返回了没有必要继续开始了 因为数组是排过序的后面肯定都大于0

接下来第一步去重 对a进行去重 

这边是有两种判断的情况 num[i]=num[i+1] 或者是num[1]=num[i-1]

这里我们使用的是第二种去重 为什么不使用第一种呢??

假设有一个数组是{-1,-1,2} 当我们使用的是第一种 -1 和-1相等直接返回 但是 这个-1+-1+2满足我们的条件啊 所以说第一种其实是在判断结果集中是否有重复的元素 不满足我们的条件

但是我们使用第二种的话 这个-1+-1+2已经被我们遍历过了 已经存在我们的结果集中了 再去遍历就会发现第二个元素等于第一个元素然后就直接return

对i去重之后就需要对b和c进行操作 

收获完结果后需要对b和c进行一个去重

去重的逻辑就是在保证right>left 的基础上 如果right【i】=right【i-1】i一直减减

同理如果left【i】=left【i+1】left++

同时当收获了结果之后 left++ right--同时去操作

去重的逻辑放到我们收获结果逻辑的下面 因为比如说当一个数组是00000当left和right一直移动相等了的话 直接就从刚开始就pass掉了不满足(left>right)这个条件

. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/3sum/solutions/284681/san-shu-zhi-he-by-leetcode-solution

18四数之和

四数之和也就是多了一个k循环 target变成自己的数了

剪枝操作

由于三数之和的要求是target为0 所以三数排序之和i>0就可以直接剪枝return 因为后面越来越大

可是四数之和的话target是自己输入的一个数可能是正数也可能是负数 所以不能那样操作

这里的剪枝只能是num【k】>0同时 num【k】>target同时target>0的时候才能做剪枝 直接break

接下来就是去重的操作 if(k>0&&num【k-1】)直接返回 

for循环中的i和三数之和的去重操作一样 就是这边的i也可以继续做一个剪枝

如果i+k相加>0同时i+k相加>target 同时target>0满足这些条件也可以做一个返回

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

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

相关文章

vue中怎么自定义组件

目录 一:功能描述 二:实现过程 一:功能描述 在开发过程中我们经常需要自定义组件完成特定的功能,比如用户详情页,我增加一个调整余额的按钮,点击以后需要打开一个调整余额对话框,输入调整的金…

Babel 7入门基础知识 全面 实践案例篇【1】推荐。

babel前面我们梳理总结 webpack入门基础知识的时候已经用过了。趁着这个机会顺便把Babel基础知识回顾梳理一下,也欢迎正在使用babel的同学一起交流探讨,感谢。 目录 一、Babel是什么? 二、.Babel是如何工作的呢?或者原理是什么…

Windos 执行.sh文件提示没有足够权限执行的解决办法

找到Git安装目录下的sh.exe文件 右键以管理员方式运行 cd到.sh文件所在目录,注意使用 / 而不是 \ 执行.sh文件即可

JavaScript中闭包的概念与其造成的性能问题

如果一个函数没有访问任何外部作用域的变量或方法,那么它其实是拥有闭包特性的,因为在 JavaScript 中,每个函数都可以理解为对其创建时所处作用域的引用。从这个角度来说,即使普通函数本身并没有捕获外部变量,但它们仍…

JAVA集中学习第四周学习记录(四)

系列文章目录 第一章 JAVA集中学习第一周学习记录(一) 第二章 JAVA集中学习第一周项目实践 第三章 JAVA集中学习第一周学习记录(二) 第四章 JAVA集中学习第一周课后习题 第五章 JAVA集中学习第二周学习记录(一) 第六章 JAVA集中学习第二周项目实践 第七章 JAVA集中学习第二周学…

WPF篇(9)-CheckBox复选框+RadioButton单选框+RepeatButton重复按钮

CheckBox复选框 CheckBox继承于ToggleButton&#xff0c;而ToggleButton继承于ButtonBase基类。 案例 前端代码 <StackPanel Orientation"Horizontal" HorizontalAlignment"Center" VerticalAlignment"Center"><TextBlock Text"…

Redis的过期策略与内存淘汰机制详解

文章目录 Redis的过期策略1. 定时删除2. 惰性删除3. 定期删除 Redis的内存淘汰机制1. noeviction2. volatile-random3. volatile-ttl4. volatile-lru5. volatile-lfu6. allkeys-random7. allkeys-lru8. allkeys-lfu LRU与LFU算法总结 Redis作为一种高性能的键值对存储系统&…

C语言 之 理解指针(9)与指针相关的理解题

文章目录 代码1代码2代码3代码4代码5代码6代码7 本篇内容接上一篇&#xff0c;对指针进行一个更深入的理解 建议没看过 上一篇的可以看看上一篇&#xff0c;当然不看也可以。 建议先自行完成再看答案哟 代码1 #include <stdio.h> int main() {int a[5] { 1, 2, 3, 4, …

B站千亿级点赞系统服务架构设计

B站千亿级点赞系统服务架构设计 原文链接&#xff1a;https://www.bilibili.com/read/cv21576373/ 原文作者&#xff1a;哔哩哔哩技术团队-芦文超 点赞的功能太过于简单不再赘述&#xff0c;大家可以点击原文链接简单看下便可知晓。 本讲结合B站知名UP主陆总监的一期视频(h…

【vue3|第21期】Vue3中Vue Router的push和replace方法详解

日期&#xff1a;2024年8月9日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xff…

Android系统Android.bp文件详解

文章目录 1. 基本语法结构2. 常见模块类型3. 模块属性常见属性包括&#xff1a; 4. 具体示例5. 高级功能5.1. 条件编译5.2. 变量定义与使用5.3. 模块继承 6. 总结 Android.bp 是 Android 构建系统&#xff08;Android Build System&#xff09;中的配置文件&#xff0c;用于描述…

C语言典型例题31

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 习题2.8 请编写程序将China译为密码&#xff0c;密码的规律是&#xff1a;用原来字母后面的第4个字母代替原来的字母。 例如:C后面的4个字母是G&#xff0c;h后面第4个字母为l 代码&#xff1a; //《C程序设计教程…

TinyLLaVA: A Framework of Small-scale Large Multimodal Models

发表时间&#xff1a;22 Feb 2024 论文链接&#xff1a;https://arxiv.org/pdf/2402.14289 作者单位&#xff1a;SKLCCSE, Institute of Artificial Intelligence, Beihang University, Beijing, China Motivation&#xff1a;当前的大语言模型的参数量太大了&#xff0c;作…

flask学习-day1

介绍 django是大而全&#xff0c;flask是轻量级的框架 django提供非常多组件&#xff1a;orm/session/cookie/admin/form/modelform/路由/视图/模板/中间件/分页/auth/contentype/缓存/信号/多数据库连接 flask本身没有太多的功能&#xff1a;路由/试视图/模板/session/中间件…

【C++ 面试 - 基础题】每日 3 题(八)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…

24/8/9算法笔记 决策树VS线性回归

from sklearn.tree import DecisionTreeRegressorfrom sklearn.linear_model import LinearRegressionfrom sklearn import datasetsfrom sklearn.model_selection import train_test_split import numpy as np X,y datasets.load_diabetes(return_X_yTrue)#糖尿病数据 X_tra…

03、MySQL-DQL(数据查询语言)

目录 1、编写顺序 2、基本查询 3、条件查询 4、聚合函数 5、分组查询 6、排序查询 7、分页查询 8、执行顺序 1、编写顺序 SELECT 字段列表 FROM 表名列表 WHERE 条件列表 GROUP BY 分组字段列表 HAVING 分组后条件列表 ORDER BY 排序字段列表 LIMIT 分页参数2、基本查…

Cesium初探-相机

在 Cesium 中&#xff0c;相机&#xff08;Camera&#xff09;是一个非常重要的概念&#xff0c;它代表了用户观察 3D 场景的视角。相机不仅决定了用户看到的内容&#xff0c;还定义了观察的角度、距离和方向。理解 Cesium 中的相机是如何工作的对于创建有效的 3D 地图和地球应…

关于Redis的面试题(一)

一、为什么要使用Redis 内存数据库&#xff0c;速度很快工作单线程worker&#xff0c;串行化&#xff0c;原子操作&#xff0c;IO线程是多线程的。避免上下文切换使用 IO模型&#xff0c;天生支撑高并发kv模型&#xff0c;v具有类型结构具有本地方法&#xff0c;计算数据移动二…

政府经济学(练习题)

政府经济学&#xff08;练习题&#xff09; 一、单项选择题 政府经济活动的主体是&#xff08; &#xff09;。 A.各级政府 B.各级人大 C.各级政协 D.各级党委政府经济的依据主要是&#xff08; &#xff09;。 A.私人财产所有权 B.社会公共权力 C.道德劝说 D.法律制度1776年亚…