首页 > 编程语言 >9.优化算法之哈希表

9.优化算法之哈希表

时间:2024-07-02 09:27:25浏览次数:25  
标签:key map String int 算法 哈希 new 优化 public

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String,List<String>> map=new HashMap<>();
        for(String str:strs){
            char[] array=str.toCharArray();
            Arrays.sort(array);//进行排序之后与第一个进行比较即可
            String key=new String(array);
            List<String> list=map.getOrDefault(key,new ArrayList<String>());
            list.add(str);
            map.put(key,list);
        }
        return new ArrayList<List<String>>(map.values());
    }
}

0.哈希表简介

1.两数之和

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

解法一:暴力解法

 解法二:优化-哈希表

​
class Solution {
        // public static int[] twoSum(int[] nums, int target) {
        //     int[] arr=new int[2];
        //     int i=0;
        //     for(i=0;i<nums.length;i++){
        //         //循环
        //         //1.记住第一个数字
        //         int tmp1=nums[i];
        //         int target1=i;
        //         for(int j=i+1;j<nums.length;j++){
        //             int tmp2=nums[j];
        //             int target2=j;
        //             if(tmp2+tmp1==target){
        //                 arr[0]=target1;
        //                 arr[1]=target2;
        //                 return arr;
        //             }
        //         }
        //     }
        //     return null;
        // }
        public static int[] twoSum(int[] nums, int target) {
            int len=nums.length;
            Map<Integer,Integer> hashMap=new HashMap<>(len-1);
            hashMap.put(nums[0],0);
            for(int i=1;i<len;i++){
                if(hashMap.containsKey(target-nums[i])){
                    return new int[]{hashMap.get(target-nums[i]),i};
                }
                hashMap.put(nums[i],i);
            }
            return null;
        }
    }

​
public static int[] twoSum(int[] nums, int target) {
            int len=nums.length;
            Map<Integer,Integer> hashMap=new HashMap<>(len-1);
            for(int i=0;i<len;i++){
                int x=target-nums[i];
                if(hashMap.containsKey(x)){
                    return new int[]{hashMap.get(target-nums[i]),i};
                }
                hashMap.put(nums[i],i);
            }
            return null;
        }

2.判断是否为重排字符串 

面试题 01.02. 判定是否互为字符重排 - 力扣(LeetCode)

 

class Solution {
    public boolean CheckPermutation(String s1, String s2) {
        if(s1.length()!=s2.length()){
            return false;
        }
        int[] hash=new int[26];
        for(int i=0;i<s1.length();i++){
            hash[s1.charAt(i)-'a']++;
            hash[s2.charAt(i)-'a']--;
        }
        for(int i=0;i<s1.length();i++){
            if(hash[s1.charAt(i)-'a']!=0){
                return false;
            }
            
        }
        return true;
    }
}

4.存在重复元素1

217. 存在重复元素 - 力扣(LeetCode)

class Solution {
    public boolean containsDuplicate(int[] nums) {
        Set<Integer> hashset=new HashSet<>();
        for(int i=0;i<nums.length;i++){
            if(hashset.contains(nums[i])){
                return true;
            }
            hashset.add(nums[i]);
        }
        return false;
    }
}

5.存在重复元素2

219. 存在重复元素 II - 力扣(LeetCode)

​ 

class Solution {
    public boolean containsNearbyDuplicate(int[] nums, int k) {
        Map<Integer,Integer> hashmap=new HashMap<>();
        for(int i=0;i<nums.length;i++){
            if(hashmap.containsKey(nums[i])){
                if(i-hashmap.get(nums[i])<=k){
                    return true;
                }
            }
            hashmap.put(nums[i],i);
        }
        return false;
    }
}

6.字母异位词分组

49. 字母异位词分组 - 力扣(LeetCode)

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String,List<String>> map=new HashMap<>();
        for(String str:strs){
            char[] array=str.toCharArray();
            Arrays.sort(array);//进行排序之后与第一个进行比较即可
            String key=new String(array);
            List<String> list=map.getOrDefault(key,new ArrayList<String>());
            list.add(str);
            map.put(key,list);
        }
        return new ArrayList<List<String>>(map.values());
    }
}

标签:key,map,String,int,算法,哈希,new,优化,public
From: https://blog.csdn.net/m0_47017197/article/details/140067282

相关文章

  • 基于摄像头抓取学生人脸朝向判断学生上课状态检测的算法
    智能检测学生听课状态的网络模型:开启高效学习的新篇章 在当今数字化教育的浪潮中,我们致力于研发一款创新的检测学生听课状态的网络模型,旨在为教育领域带来革命性的变革,提升教学质量,优化学生的学习体验。 一、模型概述这款网络模型基于先进的人工智能技术和深度学习算法......
  • 基于自适应波束成形算法的matlab性能仿真,对比SG和RLS两种方法
    1.程序功能描述基于自适应波束成形算法的matlab性能仿真,对比SG和RLS两种方法.            2.测试软件版本以及运行结果展示MATLAB2022a版本运行   3.核心程序forii=1:MTKLifSEL==1fori=1:length(r)......
  • PCL 基于点云RGB颜色的区域生长算法
    RGB颜色的区域生长算法一、概述1.1算法定义1.2算法特点1.3算法实现二、代码示例三、运行结果......
  • 探索PcapPlusPlus开源库:网络数据包处理与性能优化
    文章目录0.本文概要1.PcapPlusPlus介绍1.1概述1.2主要特性和功能1.3PcapPlusPlus主要模块关系和依赖1.4网络协议层处理过程2.实例2.1基于PcapPlusPlus的应用程序设计和封装流程:2.2多线程示例代码2.3代码说明:3.程序性能进一步优化3.1避免重复解析3.2减少......
  • 算法笔记:模拟过程(螺旋遍历矩阵)
    1模拟过程“模拟过程题”通常指的是那些要求编程者通过编写代码来“模拟”或重现某个过程、系统或规则的题目。这类题目往往不涉及复杂的数据结构或高级算法,而是侧重于对给定规则的精确执行和逻辑的清晰表达。其中螺旋遍历矩阵的题目就是一类典型的模拟过程题,需要精心设......
  • 算法金 | Transformer,一个神奇的算法模型!!
    大侠幸会,在下全网同名「算法金」0基础转AI上岸,多个算法赛Top「日更万日,让更多人享受智能乐趣」抱个拳,送个礼在现代自然语言处理(NLP)领域,Transformer模型的出现带来了革命性的变化。它极大地提升了语言模型的性能和效率,而自注意力机制是其中的核心组件。今个儿我们将......
  • [JLU] 数据结构与算法上机题解思路分享-第二次上机
    前言首先,请务必自己尽全力尝试实现题目,直接看成品代码,思维就被拘束了,也很容易被查重。这里只是思路解析的博客,代码仓库在JLU_Data_Structures_Record希望你能在这里找到你想要的:)正文A二叉树的创建与遍历分数10作者朱允刚单位吉林大学通过带空指针信息的先根序列(......
  • 代码随想录算法训练营第九天|232.用栈实现队列、225.用队列实现栈、 20.有效的括号、1
    文章目录232.用栈实现队列思路--直接模拟225.用队列实现栈解法一、两个队列模拟解法二、一个队列模拟20.有效的括号栈模拟1047.删除字符串中的所有相邻重复项解法一、栈解法二、双指针232.用栈实现队列题目链接:232.用栈实现队列-力扣(LeetCode)题目描述:请你仅......
  • 7.1 闲话-Erdős–Gallai 定理和哈基米算法(没写完)
    前几天考试有一个建出最大流模型,转为最小割,然后模拟最小割的套路。这一个套路并不是少见的。在Gale-Ryser定理和Erdős–Gallai定理的证明都体现了这个想法。Gale-Ryser定理:我先阅读了博文的ycx060617的评论的对Gale-Ryser定理的证明,略去。Erdős–Gallai定理:非增序......
  • educoder 机器学习 --- kNN算法
    第一关:#encoding=utf8importnumpyasnpfromcollectionsimportCounterclasskNNClassifier(object):def__init__(self,k):'''初始化函数:paramk:kNN算法中的k'''self.k=k#用来......