首页 > 其他分享 >1.5 无序集合/映射

1.5 无序集合/映射

时间:2023-02-09 04:22:05浏览次数:73  
标签:1.5 hash String 映射 无序 查询 哈希 集合

有序集合(映射)容器一般基于平衡二叉搜素树实现,无序集合(映射)容器则一般基于哈希表实现。
哈希表,是数组基于某种映射规则(函数)的⼀种扩展:

  • 外部表现为 hash_table['key'] = value,直接通过关键字(浮点数,字符串甚至结构体)索引
  • 内部实现为 linear_list[hash(key)] = value,依靠哈希函数把复杂信息映射到一个较小的值域,并作为索引

哈希函数设计得越好,数据分布越均匀,碰撞概率越小。理想情况下,哈希表的插入、查询、删除时间复杂度均为\(O(1)\)。所以,当我们遇到了要快速判断一个元素是否出现集合里的问题,就可以考虑哈希法。

题目 思路 备注
383. 赎金信 字符统计|hash(char)=char-'a' 等价于判断两个字符统计表是否相等
349. 两个数组的交集 对集合\(B\)元素,查询是否也存在于\(A\) 注意不要一边访问一边删除,HashSet
202. 快乐数 模拟,查询是否运算陷入无限死循环 另一个检测环的方式是快慢指针
1. 两数之和 在\(x\)前,查询是否存在值\(target-x\) 下标作为附加信息需要存储,HashMap
874. 模拟行走机器人 模拟,查询当前格点是否属于障碍物 哈希设计;地图方向数组
49. 字母异位词分组 字母基元 -> 异位词列表 分组和哈希冲突“挂链”的相似性;哈希设计

30. 串联所有单词的子串

暴力

class Solution {
    public List<Integer> findSubstring(String s, String[] words) {
        List<Integer> ans=new ArrayList<>();
        int tot=0;
        for(String word:words){
            tot+=word.length();
        }

        for(int i=0;i+tot<=s.length();i++){
            String str=s.substring(i,i+tot);
            if(validate(str,words)) ans.add(i);
        }

        return ans;
    }

    boolean validate(String str,  String[] words){
        int k=words[0].length();
        HashMap<String, Integer> splitWords=new HashMap<>();
        for(int i=0;i<str.length();i+=k){
            String key=str.substring(i,i+k);
            if(splitWords.get(key)!=null){
                splitWords.put(key,splitWords.get(key)+1);
            }
            else splitWords.put(key,1);
        }

        for(String word:words){
            Integer count=splitWords.get(word);
            if(count==null) return false;
            else splitWords.put(word,splitWords.get(word)-1);
        }

        for(String key:splitWords.keySet()){
            if(splitWords.get(key)!=0) return false;
        }

        return true;
    }
}

146. LRU 缓存

标签:1.5,hash,String,映射,无序,查询,哈希,集合
From: https://www.cnblogs.com/anrushan/p/hash.html

相关文章

  • 75、商城业务---认证服务---SpringMVC的视图映射
    以前我们希望跳转页面时,都是前端页面给后端发送请求,后端controller使用一个空方法来接受,返回要跳转的页面的名字,实现页面跳转。但是SpringMVC提供了视图映射机制,我们无需......
  • flask web 项目2 URL与视图映射
    #url:http/https://www.qq.com/path#url与视图:path与视图 #1.定义带有参数的urlint类型[email protected]("blog/<int:blog_id>"):defblog_detail(blog_id):......
  • 虚拟内存跟物理内存之间的映射mmap\munmap
    #include<stdio.h>#include<sys/mman.h>intmain(void){/**创建虚拟内存的映射*void*mmap(void*__addr,size_t__len,int__prot,int__fla......
  • 1.5函数的调用机制
        哪怕是高级语言编写的程序,函数调用处理也是通过把程序计数器的值设定成函数的存储地址来实现的。不过,这和条件分支、循环的机制有所不同,因此单纯的跳转指令无法......
  • 创建keycloak用户、角色、用户角色映射关系(Java API + Rest API实现)
    @Slf4j@ServicepublicclassKeyCloakService{privateRestTemplaterestTemplate;privateKeycloakAdminClientkeycloakAdminClient;/***kc新......
  • 11.5用中断来实现实时处理
    在主程序运行的过程中,中断发生的频率有多大呢?实际上,大部分的外围设备,都会频繁地发出中断请求。其原因就是为了实时处理从外围设备输入的数据。虽然不利用中断也可以从外围......
  • git: 移除远程映射,remote origin
    背景在添加远程映射的时候,把远程仓库地址写错了。。。。[email protected]:错的.git解決方法方法一:ChangetheURI(URL)foraremoteGitrepo......
  • 5.1.5_原反补码的特性对比
    这一小节中,我们要学习原码、反码、补码3种码的特性对比,需要注意这样的几个维度。一会我们会来分别探讨,这是小题当中很常见的考点哈。这个小节的内容不难,也不多,我们只需......
  • SQL映射文件
    <mappernamespace="对应Mapper接口的全类名"><selectid="对应Mapper接口中的方法名"resultMap="SQL语句的返回值名称"><!--SQL语句--></select><re......
  • springmvc url处理映射的三种方式集合
    目录一、springMVC简介二、工作流程与介绍三、代码截图以下组件通常使用框架提供实现:1、DispatcherServlet:前端控制器2、HandlerMapping:处理器映射器3、Handler:......