leetcode--哈希表概念总结和经典题目解析

本文总结了使用哈希表解决LeetCode中的经典问题,包括变位词组、两数之和、数对和等。通过哈希表的键值对特性,高效地处理数据。文中提供了Java源代码示例,展示了如何利用哈希表解决这些问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

题目一:变位词组

题目二:两数之和

题目三:数对和

题目四:有效的字母异位词

题目五:有多少个数字相当于当前数字

题目六:森林中的兔子

题目七:根据字符出现频率排序


哈希表

    主要利用hashmap的键值对特点,进行数据的处理。

个人总结的一段常用代码:

map中某个键对应的值需要改变+1的时候,先取出该键对应的值,再把该值加1之后重新放入map中。

if(map.containsKey(key1)){
    int tempcount = map.get(keys)+1;
    map.put(key1,tempcount);
}

 

题目一:变位词组

(题目链接:https://leetcode-cn.com/problems/group-anagrams-lcci)

编写一种方法,对字符串数组进行排序,将所有变位词组合在一起。变位词是指字母相同,但排列不同的字符串。

注意:本题相对原题稍作修改

示例:

输入: ["eat", "tea", "tan", "ate", "nat", "bat"],
输出:
[
  ["ate","eat","tea"],
  ["nat","tan"],
  ["bat"]
]
说明:

所有输入均为小写字母。
不考虑答案输出的顺序。

方法:使用hashmap存储结构进行数据的存储,其中key存的字符串包含字母相同并且也顺序相同的,value存储的包含字母相同但是也顺序不同的

Java源代码

import java.util.*;

public class hashword {
    public static void main(String[] args) {
        String[] strs = new String[]{"eat", "tea", "tan", "ate", "nat", "bat"};
        List<List<String>> strs2 = new ArrayList<List<String>>();
        Map<String, List<String>> map = new HashMap<String, List<String>>();
        for (int i = 0; i <strs.length ; i++) {
            char[] arr = strs[i].toCharArray();
            Arrays.sort(arr);
            String arrstr = new String(arr);
            if(!map.containsKey(arrstr)){
                List<String> templiststring = new ArrayList<>();
                templiststring.add(strs[i]);
                map.put(arrstr,templiststring);
            }
            else{
                map.get(arrstr).add(strs[i]);
            }
        }
        for(String key :map.keySet()){
            strs2.add(map.get(key));
        }
        System.out.println("value: "+strs2);
    }
}

最重要的步骤:

    记得对要处理的字符串转换为字符数组,然后对字符数组进行排序。

【注意】:思路总结:新的哈希结构HashMap<String, List<String>>();注意,这是我之前没有的思维,即map中key和value传统是一一对应的,

但是我们把value的数据结构形式定位list<String>,这样实质上实现了一对多的存储,此种哈希思维注意总结

【注意】:语法总结:把字符数组变为字符串,我们使用String arrstr = new String(arr);

                                    把字符串变成字符数组,我们使用char[] arr = str.toCharArray();

【注意】:语法总结:Arrays.sort(arr)可以实现数组的自动排序

题目二:两数之和

(题目链接:https://leetcode-cn.com/problems/two-sum

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:

输入:nums = [3,2,4], target = 6
输出:[1,2]
示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]

方法一:直接for循环,比较简单,我们不在展

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值