05并查集 + 散列表 + 布隆过滤器 + 跳表 + 自动机(D2_散列表(D2_刷题练习))

目录

1. 两数之和(简单)

1.1. 题目描述

1.2. 解题思路

方法:哈希表(推荐使用)

2. 数组中出现次数超过一半的数字(简单)

2.1. 题目描述

2.2. 解题思路

方法:哈希表(推荐使用)

3. 数组中只出现一次的两个数字(中等)

3.1. 题目描述

3.2. 解题思路

方法一:哈希表(推荐使用)

方法二:异或运算(扩展思路)

4. 缺失的第一个正整数(中等)

4.1. 题目描述

4.2. 解题思路

方法一:哈希表(推荐使用)

方法二:原地哈希(扩展思路)

5. 三数之和(中等)

5.1. 题目描述

5.2. 解题思路

方法一:哈希表(推荐使用)

6. 字母异位词分组(中等)

6.1. 题目描述

6.2. 解题思路

方法一:排序

方法二:计数

7. 最长连续序列(中等)

7.1. 题目描述

7.2. 解题思路

方法一:哈希表

8. 找出两数组的不同

8.1. 题目描述

8.2. 解题思路

方法一:哈希表

9. 独一无二的出现次数

9.1. 题目描述

9.2. 解题思路

方法一:哈希表

10. 确定两个字符串是否接近

10.1. 题目描述

10.2. 解题思路

方法一:哈希表

11. 相等行列对

11.1. 题目描述

11.2. 解题思路

方法一:模拟

方法二:哈希表

12. LRU 缓存

12.1. 题目描述

12.2. 解题思路

方法一:哈希表 + 双向链表


1. 两数之和(简单)

1.1. 题目描述

1.2. 解题思路

方法:哈希表(推荐使用)

2. 数组中出现次数超过一半的数字(简单)

2.1. 题目描述

2.2. 解题思路

方法:哈希表(推荐使用)

java实现代码:

import java.util.*;
public class Solution {
    public int MoreThanHalfNum_Solution(int [] array) {
        //哈希表统计每个数字出现的次数
        HashMap<Integer, Integer> mp = new HashMap<Integer, Integer>(); 
        //遍历数组
        for(int i = 0; i < array.length; i++){ 
            //统计频率
            if(!mp.containsKey(array[i]))
                mp.put(array[i], 1);
            else
                mp.put(array[i], mp.get(array[i]) + 1);
            //一旦有个数大于长度一半的情况即可返回
            if(mp.get(array[i]) > array.length / 2) 
                return array[i];
        }
        return 0;
    }
}

3. 数组中只出现一次的两个数字(中等)

3.1. 题目描述

3.2. 解题思路

方法一:哈希表(推荐使用)

import java.util.*;
public class Solution {
    public int[] FindNumsAppearOnce (int[] array) {
        HashMap<Integer, Integer> mp = new HashMap<Integer, Integer>(); 
        ArrayList<Integer> res = new ArrayList<Integer>();
        //遍历数组
        for(int i = 0; i < array.length; i++) 
            //统计每个数出现的频率
            if(!mp.containsKey(array[i]))
                mp.put(array[i], 1);
            else
                mp.put(array[i], mp.get(array[i]) + 1);
        //再次遍历数组
        for(int i = 0; i < array.length; i++) 
            //找到频率为1的两个数
            if(mp.get(array[i]) == 1) 
                res.add(array[i]);
        //整理次序
        if(res.get(0) < res.get(1)) 
            return new int[] {res.get(0), res.get(1)};
        else
            return new int[] {res.get(1), res.get(0)};
    }
}

方法二:异或运算(扩展思路)

Java实现代码:

import java.util.*;
public class Solution {
    public int[] FindNumsAppearOnce (int[] array) {
        int res1 = 0;
        int res2 = 0;
        int temp = 0;
        //遍历数组得到a^b
        for(int i = 0; i < array.length; i++) 
            temp ^= array[i];
        int k = 1;
        //找到两个数不相同的第一位
        while((k & temp) == 0) 
            k <<= 1;
        for(int i = 0; i < array.length; i++){
            //遍历数组,对每个数分类
            if((k & array[i]) == 0) 
                res1 ^= array[i];
            else
                res2 ^= array[i];
        }
        //整理次序
        if(res1 < res2) 
            return new int[] {res1, res2};
        else
            return new int[] {res2, res1};
    }
}

4. 缺失的第一个正整数(中等)

4.1. 题目描述

4.2. 解题思路

方法一:哈希表(推荐使用)

import java.util.*;
public class Solution {
    public int m
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodingW丨编程之路

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值