首页 > 其他分享 >【Leetcode_Hot100】哈希

【Leetcode_Hot100】哈希

时间:2024-09-01 18:52:09浏览次数:9  
标签:map HashMap int list Hot100 哈希 new Leetcode String

哈希

1. 两数之和

49. 字母异位词分组

128. 最长连续序列

1. 两数之和

方法一:HashMap

在元素放入数组之前就进行判断,保证了不会取出同一个元素的情况,,例如[3,3],如果先将数组中的所有元素放入hashMap,再判断是否存在,则返回结果为[1,1],不符合题意。

class Solution {
    public int[] twoSum(int[] nums, int target) {
        HashMap<Integer, Integer> map = new HashMap<>();
        int[] res = new int[2];

        for(int i=0; i<nums.length; i++) {
            if(map.containsKey(target-nums[i])) {
                res[0] = i;
                res[1] = map.get(target-nums[i]);
                break;
            }
            map.put(nums[i], i);
        }

        return res;

    }
}

49. 字母异位词分组

方法一:HashMap

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        // map 记录 <key, stringList>
        Map<String, List<String>> map = new HashMap<>();

        for(String str : strs) {
            char[] array = str.toCharArray();
            Arrays.sort(array);

            // key 是 任意一个字符串 按字典序排列好的字符串
            String key = new String(array);
            // map中如果存在list则直接获取,否则需要新建一个list
            List<String> list = map.getOrDefault(key, new ArrayList<String>());
            list.add(str);
            map.put(key, list);
        }

        return new ArrayList<List<String>>(map.values());

    }
}

128. 最长连续序列

方法一:HashSet

先将数组中的元素放入Set集合中,再从nums[i]开始,依次判断下一个元素是否在set中,如果存在则tempLength加一,最后结果resrestempLength大中取大。

class Solution {
    public int longestConsecutive(int[] nums) {
        int res = 0;

        Set<Integer> set = new HashSet<>();

        for(int i=0; i<nums.length; i++) {
            set.add(nums[i]);
        }

        for(int i=0; i<nums.length; i++) {
            int currentNum = nums[i];
            int tempLength = 1;

            while(set.contains(currentNum+1)) {
                currentNum += 1;
                tempLength++;
            }

            res = Math.max(res, tempLength);
        }

        return res;
    }
}

标签:map,HashMap,int,list,Hot100,哈希,new,Leetcode,String
From: https://www.cnblogs.com/syr463/p/18391592

相关文章

  • 数据结构:(LeetCode572)另一棵子树
    给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。示例1:......
  • LeetCode - 6 Z 字形变换
    题目来源6.Z字形变换-力扣(LeetCode) 题目描述将一个给定字符串s根据给定的行数numRows,以从上往下、从左到右进行Z字形排列。比如输入字符串为"PAYPALISHIRING"行数为3时,排列如下:P A H NAPLSIIGY I R之后,你的输出需要从左往右逐......
  • 基于感知哈希算法的以图搜图系统的设计
    摘 要随着数字媒体和计算机网络的迅猛发展,互联网上在线图像的飞速增长,用户对图形图像的搜索需求日益提高,一种“以图搜图”的新型搜索模式应运而生。“以图搜图”是以用户提供的图形图像图片等为视觉特征基础,为用户提供互联网上相关图形图像资料检索服务,这是一种专业的搜索引......
  • 343. 整数拆分(leetcode)
    https://leetcode.cn/problems/integer-break/dp,思路较为巧妙,需要考虑一个数至少能拆成两份这个点,且需要考虑到拆的这个数的值域是多少(1,i-1)且选择拆一次还是拆多次classSolution{public:intintegerBreak(intn){//f[i]表示拆分i成若干个整数的最大乘......
  • 63. 不同路径 II(leetcode)
    简单dphttps://leetcode.cn/problems/unique-paths-ii/description/传统做法:classSolution{public:intuniquePathsWithObstacles(vector<vector<int>>&obstacleGrid){intf[110]={0};//优化一维f[1]=1;intm=obstacleGrid......
  • 代码随想录算法day5 - 哈希表1
    题目1242.有效的字母异位词给定两个字符串*s*和*t*,编写一个函数来判断*t*是否是*s*的字母异位词。字母异位词是通过重新排列不同单词或短语的字母而形成的单词或短语,通常只使用所有原始字母一次。示例1:输入:s="anagram",t="nagaram"输出:true示例2:......
  • 哈希表hashtable课堂笔记
    /*哈希表,表示键/值对的集合,这些键/值对根据键的哈希代码进行组织。它的每个元素都是一个存储在DictionaryEntry对象中的键/值对。键不能为空引用,但值可以。哈希表的构造函数有多种,这里介绍两种最常用的。*///(1)使用默认的初始容量、加载因子、哈希代码提供程序和比......
  • 数据结构:(LeetCode965)单值二叉树
     一:定义如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回false。示例1:输入:[1,1,1,1,1,null,1]输出:true示例2:输入:[2,2,2,5,2]输出:false 提示:给定树的节点数范围是 [1,100]。每个节点的值都是......
  • 数据结构:(LeetCode 965)相同的树
    给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例1:输入:p=[1,2,3],q=[1,2,3]输出:true示例2:输入:p=[1,2],q=[1,null,2]输出:false示例3:输入:p=[1,2,1]......
  • leetcode刷题day4|链表部分(24. 两两交换链表中的节点 、19.删除链表的倒数第N个节点、
    前言:链表练习的第二天,对链表的理解加深了24.两两交换链表中的节点这个题一开始的思路是用cur和next两个指针来做,但是绕来绕去绕迷糊了,最后超时了。把错误的代码放在下面警醒大家:主要问题出现在这两行代码,next.next发生了更改。next.next=next.next.next;next.next.nex......