LeetCode 热题100专题解析:哈希与双指针

本文将重点解析 LeetCode 热题100 中关于哈希和双指针的题目,帮助读者更好地理解和掌握这两种算法思想。

哈希表专题

  1. 两数之和

题目描述:给定一个整数数组和一个目标值,找出数组中 和 为目标值的两个数的下标。

上来的想法,想想人脑怎么着找。无非就是两层循环,那肯定有重复找的数的呀。我知道A他的天选就是B,那我不妨就把在找A的时候看看B好了,也省的非要凑齐A+B.

解题思路:这是一道典型的哈希表应用题目。我们可以遍历数组,对于每个元素,计算目标值与当前元素的差值,然后检查这个差值是否存在于已经遍历过的元素中。如果存在,那么我们就找到了一对和为目标值的数。

public int[] twoSum(int[] nums,int k){Map<Integer,Integer> map=new Hashmap<>();//题目让返回的是下标for(int i=0;i<nums.size();i++){if(map.containsKey(k-nums[i])){return new int[]{i,map.get(k-nums[i])};}map.put(nums[i],i);}return new int[]{-1,-1};
}

个人碎碎念:这道题也算是leetcode 热题100里面的 abandon了,我每次都从这个开始。也都abandon了。

  1. 字母异位词分组

题目描述:给定一个字符串数组,将字母异位词的字符串分组在一起。

异构词是什么, abc cba cab 《-这些就是异构词,它们构成的元素都是一样的,排列不同罢了。那就把他们打成一样的状态

解题思路:这个问题可以通过哈希表来解决。我们可以遍历每个字符串,计算它的字母频率(例如,‘a’ 出现的次数、‘b’ 出现的次数等),然后将这个频率作为键值存储在哈希表中。接着,对于每个新的字符串,我们检查它的字母频率是否已经存在于哈希表中,如果存在,就将它添加到对应的列表中。

伪代码
维护答案数组
遍历字符串数组
统计字符串次数 得到map
现在是以abc开头的,所以先往答案数组压入abc
之后根据abc的map进行判断,那些可以跟在abc的数组里面
如果他们统计次数都是和map里面的匹配,ok,加进去,然后从原来的数组里面remove掉。
java
public List<List> solution(String[] strs){
List<List> ans=new ArrayList<>();
维护这个结果,就考虑什么时候加就行了
那肯定是有元素和前面这个元素构成一样了呀,-》构成怎么表示-》hashmap
for(String str:strs){
HashMap<Character,Integer> map=new HashMap<>();
for(char c:str.toCharArray()){
map.put(c,map.getOrDefault(c,0)+1);
}
List tmp=new ArrayList<>();
tmp.add(str);
strs.remove(str);
for(String sameStr:strs){
写不下去了
}
}
}

上面是我错误思路下的产物。

我这里的错误就是没搞明白,hashmap保存的要是什么。
比较两个字符串元素,除了把他们拆开比较,一个一个存到map里面,一个个比较。还可以把他们排序之后equal比较。
其实在上面自己死胡同思路那里,就觉得hashmap应该是一个list,总不能用一个清空一个,那这后面的元素还怎么参考。


public List<List<String>> solution(String[] strs){Map<String,List<String>> map=new HashMap<>();for(String str:strs){//HashMap<Character,Integer> map=new HashMap<>();char[] array=str.toCharArray();Array.sort(array);String a=new String(array);if(!map.containsKey(a)){List<String> tmp=new ArrayList<>();tmp.add(str);map.put(a,tmp);}else{map.get(a).add(str);}}return new ArrayList<>(map.values());
}

双指针专题

  1. 移动零

题目描述:给定一个数组,将所有 0 移动到数组的末尾,保持非零元素的相对顺序。

解题思路:这是一个经典的双指针问题。我们可以使用两个指针,一个指针遍历数组,另一个指针指向当前非零元素的位置。当我们遇到非零元素时,就将它与指针指向的位置交换,然后移动指针。

  1. 盛最多水的容器

题目描述:给定一个由非负整数表示的数组,用来表示容器的宽度和高度。计算由这些容器组成的堤坝能盛多少水。

解题思路:这个问题可以通过双指针来解决。我们维护两个指针,一个在数组的开始,另一个在数组的末尾。这两个指针代表堤坝的两端。我们计算由这两个指针形成的堤坝能盛多少水,然后移动能形成更大堤坝的一端的指针。

  1. 三数之和

题目描述:给定一个包含 n 个数字的数组,找出所有三元组,使得这些数的和为 0。

解题思路:虽然这个问题看起来需要三重循环,但实际上可以通过双指针技术来优化。首先对数组进行排序,然后遍历数组,对于每个元素,我们使用两个指针分别指向当前元素的左右两侧,尝试找到和为 0 的三元组。

  1. 接雨水

题目描述:给定 n 个非负整数,用以表示房屋的高度。如果雨水从上到下落下来,计算雨水能接多少。

解题思路:这个问题可以通过双指针和动态规划的结合来解决。我们维护一个数组来保存每个位置左边和右边的最高条形块。然后遍历原数组,计算每个位置能接的雨水量,即当前位置的房屋高度与左右两边最高条形块中的较小者之差。

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

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

相关文章

忘记密码找回流程请求拦截器-前端

目录 设置找回密码请求拦截器 1.相关参数 2.约定 代码实现 1. 实现思路 2. 实现代码 校园统一身份认证系统&#xff1a; 基于网络安全&#xff0c;找回密码、重新设置密码的流程和正常登录流程中密钥等请求头不一致。 设置找回密码请求拦截器 1.相关参数 clientId 应…

多线程实现

1.多线程&#xff1a;并发实现 主线程和子线程并行实现。 一个进程中有多个线程&#xff0c;可以同时进行多个任务。进程是系统分配的&#xff0c;线程的执行是由调度器决定的。 注意&#xff1a;线程开启不一定执行&#xff0c;由Cpu调度执行。 线程创建的三种方式&#xff…

AcWing 99. 激光炸弹

Problem: AcWing 99. 激光炸弹 文章目录 思路解题方法复杂度Code 思路 这是一个二维前缀和的问题。我们需要找到一个r*r的方格&#xff0c;使得这个方格内的所有点的权值和最大。我们可以先计算出每个点的前缀和&#xff0c;然后枚举每个可能的方格&#xff0c;计算出这个方格内…

HarmonyOS系统开发ArkTS常用组件文本输入及参数

TextInput文本输入组件&#xff0c;用于接收用户输入的文本内容。 1、TextInput组件的参数 TextInput(value?:{placeholder?: string|Resource , text?: string|Resource}) placeholder属性用于设置无输入时的提示文本text用于设置输入框当前的文本内容 Entry Component st…

web蓝桥杯2022省赛真题:水果拼盘

代码及注释&#xff1a; /* TODO&#xff1a;待补充代码 */ #pond {display: flex; //flex布局flex-direction: column; //主轴方向从上到下flex-wrap: wrap; //子元素换行 } 知识点&#xff1a; flex弹性布局 父元素&#xff1a;diasplay: flex; flex-d…

20240316-2-协同过滤(collaborative filtering)

协同过滤(collaborative filtering) 直观解释 协同过滤是推荐算法中最常用的算法之一&#xff0c;它根据user与item的交互&#xff0c;发现item之间的相关性&#xff0c;或者发现user之间的相关性&#xff0c;进行推荐。比如你有位朋友看电影的爱好跟你类似&#xff0c;然后最…

【Review+预测】测试架构演进的曲折之路

文章目录 前言 一、“原始”阶段 二、“小打小闹”阶段 三、“小米加步枪”阶段 四、“摩托化部队”阶段 五、“骑兵连”阶段 六、“海军陆战队”阶段 七、“社区型组织”阶段 前言 近期公司的测试团队需要重新组织安排&#xff0c;本着谦虚谨慎的态度&#xff0c;我从…

代码随想录算法训练营 DAY 17 | 110.平衡二叉树 257.二叉树的所有路径 404.左叶子之和

110.平衡二叉树 平衡二叉树的定义&#xff1a;任何节点的左右子树高度差绝对值不超过1 空树也是AVL! 确定遍历顺序&#xff1a; 求高度用后序&#xff0c;求深度用前序。&#xff08;取决于需不需要从下往上返回结果&#xff09; 先判断它是不是平衡二叉树 如果是就返回 如…

【CVTE 一面凉经Ⅰ】循环依赖如何解决

目录 一.&#x1f981; 开始前的废话二. &#x1f981; 什么是循环依赖&#xff1f;三. &#x1f981;Spring 容器解决循环依赖的原理是什么?五. &#x1f981; 三级缓存解决循环依赖的原理六. &#x1f981; 由有参构造方法注入属性的循环依赖如何解决&#xff1f;七.&#x…

Django 中 null=True 和 blank=True 的作用

Django 中 null=True 和 blank=True 的作用 在 Django 模型中,null=True 和 blank=True 两个参数用于控制数据库字段和表单字段的行为。 null=True 数据库字段: 允许该字段存储空值 (NULL)。表单字段: 允许在提交表单时不填写该字段。示例: class MyModel(models.Model):na…

vue3通过el-cascader实现动态菜单切换页面

如果只有一级菜单只会显示一个按钮 <div style"width: 100%; margin-top: 10px; display: flex; align-items: center; border-bottom: 1px solid #ccc;"><template v-for"(menu, index) in cascaderData" :key"index"><el-casc…

整数和浮点数在内存中存储

整数在内存中的存储 整数的2进制表⽰⽅法有三种&#xff0c;即原码、反码和补码。 对于整形来说&#xff0c;数据存放内存中的其实是补码。 在计算机系统中&#xff0c;数值一律用补码来表示和存储。原因是&#xff0c;使用补码&#xff0c;可以使符号位和数值域统一处理&am…

DUSt3R:简化三维重建

3D 重建是从二维 (2D) 图像创建对象或场景的 3D 虚拟表示的任务&#xff0c;可用于模拟、可视化或本地化等多种目的。 它广泛应用于计算机视觉、机器人和虚拟现实&#xff08;VR&#xff09;等多个领域。 在基本设置中&#xff0c;3D 重建方法输入一对图像 I1 和 I2&#xff0c…

关于Java对接网络验证+实践小例子,简单易懂

一个简单的网络验证小例子&#xff0c;各位大佬勿喷 突发奇想&#xff0c;如果一位A友找你拿一份 Working Fruits&#xff0c;但是你不想这位A友把你辛苦劳作、熬夜加点写出的代码分享他或她的另外一位朋友B友&#xff0c;也许并不是很有价值的一个小作业而已&#xff0c;但是就…

数据结构:详解【栈和队列】的实现

目录 1. 栈1.1 栈的概念及结构1.2 栈的实现1.3 栈的功能1.4 栈的功能的实现1.5 完整代码 2. 队列2.1 队列的概念及结构2.2 队列的实现2.3 队列的功能2.4 队列的功能的实现2.5 完整代码 1. 栈 1.1 栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的…

网络安全进入AI赋能时代

自诞生以来&#xff0c;AI技术给信息和数字社会带来多维度变革&#xff0c;特别是近两年来生成式AI 和大模型技术的突破&#xff0c;推动一批新兴业态的出现&#xff0c;产生深远的影响。 在网络安全领域&#xff0c;如何将大模型的能力引入并赋能网络安全技术和产业发展&…

模拟B\S服务器(扩展知识点)

3.2 模拟B\S服务器(扩展知识点) 模拟网站服务器&#xff0c;使用浏览器访问自己编写的服务端程序&#xff0c;查看网页效果。 案例分析 准备页面数据&#xff0c;web文件夹。 复制到我们Module中&#xff0c;比如复制到day08中 我们模拟服务器端&#xff0c;ServerSocket类…

SpringCloud Alibaba实战和源码(8)OpenFeign使用

1、 使用Feign实现远程HTTP调用 1.1、常见HTTP客户端 HttpClient HttpClient 是 Apache Jakarta Common 下的子项目&#xff0c;用来提供高效的、最新的、功能丰富的支持 Http 协 议的客户端编程工具包&#xff0c;并且它支持 HTTP 协议最新版本和建议。HttpClient 相比传统 J…

v-if 遇到 el-form 表单验证规则遇到的bug

v-if 遇到 el-form 表单验证规则遇到的bug 需求&#xff1a;当表单项中的单选框选择 是 的时候&#xff0c;上传图片组件为必填项 <el-form-itemlabel"展示图"prop"displayImage"v-if"dengmiQueryForm.isRecommend 0"key"hasRules&quo…

RN开发搬砖经验之—处理“Duplicate class com.github.barteksc.pdfviewer“

问题信息 Duplicate class com.github.barteksc.pdfviewer.PDFView found in modules jetified-AndroidPdfViewer-3.1.0-beta.3-runtime (com.github.TalbotGooday:AndroidPdfViewer:3.1.0-beta.3) and jetified-android-pdf-viewer-2.8.2-runtime (com.github.barteksc:andro…