当前位置: 首页 > article >正文

【专项刷题】— 哈希表

1、两数之和 - 力扣(LeetCode)

思路:

  1. 使用哈希表,将每次x = target  -  nums[i],查看哈希表中是否含有这个x值
  2. 代码:
    public int[] twoSum(int[] nums, int target) {
            int n = nums.length;
            Map<Integer,Integer> hash = new HashMap<>();
            for(int i = 0; i < n; i++){
                int x = target - nums[i];
                if(hash.containsKey(x)){
                    return new int[]{i, hash.get(x)};
                }
                //没有就继续添加到哈希表
                hash.put(nums[i],i);
            }
            //照顾编译器
            return new int[]{-1,-1};
        }

 2、判定是否互为字符重排 - 力扣(LeetCode)

思路:

  1. 先判断两个字符串的长度,长度不相等直接返回false
  2. 用一个数组表示的哈希表,先添加s1的字符,再遍历s2直接减去当前字符的值,然后再判断一下,如果出现小于零的数,就说明两个字符串有不相等的字符,返回false
  3. 代码:
    public boolean CheckPermutation(String s1, String s2) {
            if(s1.length() != s2.length()){
                return false;
            }
            int[] hash = new int[26];
            //将s1中的字符添加到哈希表中
            for(int i= 0; i < s1.length(); i++){
                hash[s1.charAt(i) - 'a']++;
            }
            //将s2添加到哈希表中,顺便减去相同字符的值,小于0就返回
            for(int i = 0; i < s2.length(); i++){
                hash[s2.charAt(i) - 'a']--;
                if(hash[s2.charAt(i) - 'a'] < 0){
                    return false;
                }
            }
            return true;
        }
    

 3、存在重复元素 II - 力扣(LeetCode)

思路:

  1. 将数据存储在哈希表中,遍历数组,遍历到一个数就在哈希表中查找是否有当前数
  2. 有的话就开始进行判断,没有的话就添加到哈希表
  3. 代码:
    public boolean containsNearbyDuplicate(int[] nums, int k) {
            int n = nums.length;
            Map<Integer,Integer> hash = new HashMap<>();
            for(int i = 0; i < n; i++){
                if(hash.containsKey(nums[i])){
                    int a = hash.get(nums[i]);
                    if(Math.abs(a - i) <= k){
                        return true;
                    }
                }
                hash.put(nums[i],i);
            }
            return false;
        }

 4、字母异位词分组 - 力扣(LeetCode)

思路:

  1. 首先将字符串数组里面的字符分组,然后将它们排序
  2. 然后遍历数组的时候判断一下key,创建一个key,这个可以都是已经排序好的了,检查哈希表中是否有这个key
  3. 有的话就就将原字符添加到顺序表中,没有的话就添加到哈希表中,创建顺序表
  4. 代码:
    public List<List<String>> groupAnagrams(String[] strs) {
            Map<String, List<String>> hash = new HashMap<>();
             
            //先给字符串数组分组,然后每组字符都排序
            for(String s : strs){
                char[] tmp = s.toCharArray();
                //排序
                Arrays.sort(tmp);
                //创建key,这里面的字符串都是已经排序的
                String key = new String(tmp);
    
                //判断
                if(! hash.containsKey(key)){
                    hash.put(key,new ArrayList());
                }
                //把原字符添加到数组中
                hash.get(key).add(s);
            }
            return new ArrayList(hash.values());
        }

http://www.kler.cn/a/289253.html

相关文章:

  • 嵌入式硬件实战提升篇(一)-泰山派RK3566制作多功能小手机
  • 【linux】centos7 换阿里云源
  • `node-gyp` 无法找到版本为 `10.0.19041.0` 的 Windows SDK
  • 【缺陷检测】Anomaly Detection via Reverse Distillation from One-Class Embedding
  • Unity 性能优化方案
  • Vue.js 项目创建流程
  • 阅读笔记——《阿里巴巴Java开发规范》
  • Unity实战案例 2D小游戏HappyGlass(游戏管理类脚本)
  • git进阶·团队开发的时候为何要创建临时分支来修复bug
  • 2708. 一个小组的最大实力值(24.9.3)
  • ADB 获取屏幕坐标,并模拟滑动和点击屏幕
  • 深入理解 JavaScript DOM 操作
  • js处理echarts tooltip定时轮播
  • 一款基于Vue的低代码可视化表单设计器工具,6K star的可视化表单设计器工具,轻松搞定表单,支持多端适配(附源码)
  • 被低估的SQL
  • 基于vue框架的超市管理系统ki6i8(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • 责任链设计模式详解
  • B端系统门门清之:SCRM系统,为客户管理加上社交,如虎添翼
  • MySQL事务处理(TransAction)
  • 苹果11月推出新款M4 Mac:Mac mini设计焕新 MacBook Pro仅例行更新
  • wsl下将Ubuntu从c盘移动到其他盘
  • Linux——IO模型_多路转接(epoll)
  • 监控平台之针对vue,react上报
  • ​yum安装/更新时报错:SyntaxError: invalid syntax​
  • 全局网络代理的使用与选择
  • css的position定位的属性