首页 > 其他分享 >hot100-一刷-01哈希(共3道题)

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

时间:2024-12-01 16:43:58浏览次数:5  
标签:map 道题 String nums int 01 hot100 key new

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
            // 则必然有顺序不同但字符个数相同的字符串才有相同的key
            char[] chars = str.toCharArray();
            Arrays.sort(chars);
            // 排序后的字符串做为key
            String 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);
    }
    

128. 最长连续序列

题目链接

题目描述

image

代码实现

思路:
对于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) +1
            if(!numsSet.contains(num - 1)){
                int curNum = num;
                int cnt = 1;
                while(numsSet.contains(curNum + 1)){
                    cnt++;
                    curNum++;
                }
                res = Math.max(res, cnt);
            }
        }
        return res;
    }
}

标签:map,道题,String,nums,int,01,hot100,key,new
From: https://www.cnblogs.com/chendsome/p/18578942

相关文章

  • 2016 GC小甲(C++)
    A.数字塔(2016GC小甲2)DescriptionFJ农场里每一只奶牛的脖子上挂着一个胸牌,胸牌上面印着一个倒三角数字塔,例如奶牛Bessie脖子上的胸牌印着:749321325457921你发现什么规律了吗?除了第一行的数字外,其他行的数字都等于其正上方的数字 + 其右上方数字的和,再除以10之后的......
  • 2017 NHOI小学(C++)
    A.吃西瓜(2017NHOI小学1)问题描述:炎热的夏天来的可真快,小花猫和编程兔决定去买一个又大又甜的西瓜。可是小花和编程兔是两只非常奇怪的动物,都是偶数的爱好者,它们希望把西瓜切成两半后,每一部分的重量都是2的倍数公斤(大于0)。当然有编程兔在,它们很快就决定了买哪个瓜。小朋......
  • 1201-字符串编码
    最小栈leetcode394.题目大意:[]前的数字为出现的次数,中的内容会要重复的数据,例如输入:s="3[a2[c]]"输出:"accaccacc"解题思路:主要难点为嵌套中括号,利用栈的特点设计两个LinkedList存储次数和重复值,每次遇到左括号的时候将当前的数字和重复值分别入栈,遇到右括号的时候将数......
  • 1201-用栈实现最小队列
    最小栈leetcode232.题目大意:仅使用两个栈实现一个队列,要求实现push、pop、peek、empty解题思路:栈和队列刚好想法,队列是先进先出,设定a队列正常存放,b队列存放倒序,push的操作正常存放进a队列,pop的操作需要倒序,peek也需要倒序,将判断方法放置于peek中,peek操作不会操作具体队列,需要......
  • 20241201每日一题洛谷P1683
    普及-每日一题洛谷P1683题目描述不是任何人都可以进入桃花岛的,黄药师最讨厌像郭靖一样呆头呆脑的人。所以,他在桃花岛的唯一入口处修了一条小路,这条小路全部用正方形瓷砖铺设而成。有的瓷砖可以踩,我们认为是安全的,而有的瓷砖一踩上去就会有喷出要命的毒气,那你就死翘翘了,我们认为......
  • day01(Linux底层)基础知识
    目录导学基础知识1、Bootloader是什么2、Bootloader的基本作用3、入式中常见的Bootloader有哪些4、Linux系统移植为什么要使用bootloader5、uboot和Bootloader之间的关系6.Uboot的获取7、uboot版本命名8、uboot版本选择9、uboot的特点10.Uboot使用导学移植......
  • 电脑和网络联网故障检测排查流程-2024-12-01
       电脑和网络联网故障检测排查流程-2024-12-01   https://www.autoahk.com/archives/51704 https://www.cnblogs.com/delphixx/p/18579399                         电脑和网络联网故障检测排查流程......
  • [GXYCTF2019]禁止套娃
    题目链接:[GXYCTF2019]禁止套娃。打开环境后如下所示。经过查看请求包及响应包,均未发现有相关提示,因此使用CTFWeb常用的字典进行目录扫描(不推荐使用太大的字典)。这里使用的工具是dirsearch,扫描发现存在.git目录。因此使用工具GitHack来提取可能存在的泄露的源码。......
  • [NCTF2019]Fake XML cookbook
    题目链接:[NCTF2019]FakeXMLcookbook。打开题目后,环境如下。随便发送一个登陆包后,查看请求包与响应包。尝试XXE。POST/doLogin.phpHTTP/1.1Host:f2f80df1-2df7-4b45-a1da-b06e22a5b17a.node5.buuoj.cn:81Content-Length:155Accept:application/xml,text/xml,*/*......
  • linux安装intel编译器2018
    加压软件/public/download/parallel_studio_2018.tgz进入目录后用./install.sh开始安装 按回车 这个选择1,然后需要输入lic激活文件路径。 安装完成后添加PATH到环境变量中1、如果是普通用户,在用户的.bashrc里面添加2、如果是root用户,在/etc/profile文件的最......