hot100-一刷-01哈希(共3道题)

news/2025/2/12 11:59:54/文章来源:https://www.cnblogs.com/chendsome/p/18578942

1.两数之和

题目链接

题目描述

image

代码实现

分析:

  • 暴力的话就是两个for循环依次寻找相加为target的两个数。
  • 用一个map记录已经遍历过的数,其中key就用这个数的字面值,value就存它的下标。
    判断是否相加为taget的时候,只需要看map中是否有target-nums[i]就可以,说明当前的nums[i]和之前遍历的那个数相加就是我们要找的数。

代码:

class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer, Integer> map = new HashMap<>();for (int i = 0; i < nums.length; i++){if(map.containsKey(target - nums[i])){return new int[]{i, map.get(target - nums[i])} ;}map.put(nums[i], i);}return new int[2];}
}

49.字母异位词分组

题目链接

题目描述

image

代码实现

分析:

  • 排序,对每个str内部的字符进行排序,排序后作为key。则必然有顺序不同但字符个数相同的字符串才有相同的key

代码:

class Solution {public List<List<String>> groupAnagrams(String[] strs) {Map<String, List<String>> map = new HashMap<>();for (String str : strs){// 对每个str内部的字符进行排序,排序后作为key// 则必然有顺序不同但字符个数相同的字符串才有相同的keychar[] chars = str.toCharArray();Arrays.sort(chars);// 排序后的字符串做为keyString key = new String(chars);List<String> value = map.getOrDefault(key, new ArrayList<String>());value.add(str);map.put(key, value);}return new ArrayList<List<String>>(map.values());}
}

附加

在Java中,遍历Map的所有键(keys)的方法

  • 使用keySet()
    Map<String, Integer> map = new HashMap<>();
    // 假设这里已经向map添加了一些元素for (String key : map.keySet()) {System.out.println("Key: " + key);
    }
    
  • 使用entrySet()与增强的for循环
    Map<String, Integer> map = new HashMap<>();
    // 假设这里已经向map添加了一些元素for (Map.Entry<String, Integer> entry : map.entrySet()) {String key = entry.getKey();System.out.println("Key: " + key);
    }
    

题目描述

代码实现

思路:
对于x,x+1,..., x+y, 如果直接暴力, 则会重复计算,比如下一次计算x+2的时候,又会开始算x+3,..., x+y,但是, 这个结果一定小于x加到y的,所以只需要判断我当前是否是从这个连续数组的最开头开始的。即,有没有x-1项,有就再看x-1前,有没有(x-1) -1项..., 没有x-1项,说明当前就是最开头的。少了很多中间无意义的计数。
代码:

class Solution {public int longestConsecutive(int[] nums) {Set<Integer> numsSet = new HashSet<>();// Set去重for(int num : nums){numsSet.add(num);}// 记录最大长度int res = 0;for(int num : numsSet){// x 没有x-1 才开始算,有的话直接跳过// 假设有比x小的, x-1, 那后面遍历到x-1的时候 在循环里会计算(x-1) +1if(!numsSet.contains(num - 1)){int curNum = num;int cnt = 1;while(numsSet.contains(curNum + 1)){cnt++;curNum++;}res = Math.max(res, cnt);}}return res;}
}

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

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

相关文章

Activiti 学习笔记

工作流概述 每一项业务的开始和结束,都可以理解为一个工作流,例如,公司的费用报销的基本流程如下:员工先提出费用报销申请,提交给部门领导,部门领导审批后,提交给财务部门审批,审批完成后,通知提出申请的员工可以报销,报销流程结束。整个流程按照步骤完成,这就是一个…

高级程序语言设计课第九次作业

14.17.314.17.414.17.514.17.1014.17.1114.18.314.18.4 a: b: 14.18.5

WEB AK赛-web1_观字

对这段代码进行解析: substr($url, 0, 7) 截取url变量前7位判断是否是http协议 preg_match() 正则表达式检查 URL 中是否包含一些潜在的危险字符: 过滤了:., ;, |, <, >, *, %, ^, () 这题只需要绕过"."即可。 尝试使用url编码不可以 在curl中可以使用"…

Fail pg walkthrough Intermediate

nmap ┌──(root㉿kali)-[/home/ftpuserr] └─# nmap -p- -A 192.168.159.126 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-12-01 02:54 UTC Nmap scan report for 192.168.159.126 Host is up (0.071s latency). Not shown: 65533 closed tcp ports (reset) PORT …

通过实现 FactoryBean 接口注入 Bean

原文:如何使用 Spring 的 FactoryBean 接口在 Spring 容器中有两类的 Bean,一类是普通的 Bean,一类是工厂 Bean。这两种 Bean 都是被 Spring 的容器进行管理的。而 Spring 也提供了一个接口用于扩展工厂 Bean,我们只要实现org.springframework.beans.factory.FactoryBean即…

探索古诺尔斯语:揭开维京时代语言的神秘面纱

在历史的长河中,有一些语言以其独特的文化和历史价值,成为语言学家、历史学家乃至文学爱好者研究的宝贵资源。古诺尔斯语,作为现代北欧语言的祖先,正是这样一个充满魅力的语言。它不仅是冰岛语、瑞典语、挪威语、丹麦语、法罗语和艾尔夫达利语的源头,更是维京时代斯堪的纳…

探索古英语的奥秘:一部语言的时光机

在历史的长河中,语言如同一条蜿蜒的河流,承载着文化的变迁和人类的智慧。古英语,作为英语的早期形式,不仅见证了中世纪英格兰的辉煌,更是现代英语的根基。它如同一部时光机,带我们穿梭回那个英雄与传说并存的时代,让我们得以窥见语言的原始面貌和文化的魅力。古英语:语…

【Altium Designer 25.0.2下载与安装教程】

1、安装包 「AltiumDesigner v25.0.2.28.rar」 链接:https://pan.quark.cn/s/babcbc39d4b1 提取码:EPis 2、安装教程(建议关闭杀毒软件和系统防护) 1) 下载并解压下载的安装包,右击Installer.exe安装,弹窗安装对话框2) 点击Next3) 选择语言Chinese,I…

字符串比较内容、模拟用户登录案例

1.equals、equalsIgnoreCase 在之前我们使用“==”比较的是字符串的地址,但是地址对于我们来说没有用,我们要比较的是字符串的内容。 而equals和equalsIgnoreCase就是用于比较字符串的内容的两种方法1.equals 比较两个对象的内容是否一致,如果一致则为true,否则为false 调用…

JVM学习-03-垃圾收集器与内存分配策略

第三章、垃圾收集器与内存分配策略3.1 概述 垃圾收集需要完成的三件事情:哪些内存需要回收? 什么时候回收? 如何回收?3.2 对象已死? GC相关博客:JVM GC?我比《深入理解Java虚拟机》再深入一点点_技术交流_牛客网 (nowcoder.com) 3.2.1 引用计数算法 在Java 领域,至少主…

20222323 2021-2022-2 《网络与系统攻防技术》实验七实验报告

1.实验内容 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法。具体实践有 (1)简单应用SET工具建立冒名网站 (2)ettercap DNS spoof (3)结合应用两种技术,用DNS spoof引导特定访问到冒名网站。 2.实验过程 (1)简单应用SET工具建立冒名网站…

wsl中用qemu运行linux kernel ,ping github.com有问题

我在qemu上运行我编译的linux kernel,并尝试在上面用wget 安装unixbench (宿主机是wsl) ping github.com会失败但是我的dns是可以将github.com解析成功的我尝试ping 对应的ip地址,发现是可以的我的/etc的所有文件列在下面了,我现在不知道这究竟是什么原因(猜测可能是wsl的网…