哈希表

[哈希表]leetcode49:字母异位词分组(medium)

旧城冷巷雨未停 提交于 2019-11-27 15:58:55
题目: 解题思路: 使用无序map也就是hash来完成,对于异位词(错为词),在单词的字符排序后,会得到一样的结果,也就是说错位词就是由一组字符以不一样的顺序排列罢了。将这组字符字符作为key值,将这组字符排列构成的错位词作为value,最后将结果添加到result中。 代码: class Solution { public : vector < vector < string >> groupAnagrams ( vector < string > & strs ) { unordered_map < string , vector < string >> recond ; //key(单词字母重新排序)->value(错位的单词) vector < vector < string >> result ; for ( const auto & str : strs ) { string temp = str ; sort ( temp . begin ( ) , temp . end ( ) ) ; //将单词字符排序,用于recode添加相同字符组成的错位单词 recond [ temp ] . push_back ( str ) ; } //遍历无序容器,将错位单词添加到result中 for ( const auto & it : recond ) result .

java集合重点概括

北战南征 提交于 2019-11-27 15:23:42
**集合 一、Collection(单列集合) 1.List(有序(存储与取出的顺序一致),可重复) 1.1. ArrayList 底层数组实现,查询快,增删慢,线程不安全,效率高。 1.2.Vector 底层数据结构是数组实现,查询快,增删慢,线程安全,效率低。 1.3. LinkedList 底层数据结构是链表实现,查询慢,增删快,线程不安全,效率高。 2.Set(无序(存储与取出的顺序不一致),唯一) 2.1. HashSet 底层数据结构由哈希表(实际上是一个 HashMap 实例)实现,它不保证 set 的迭代顺序。 允许使用 null 元素,(只能有一个null)依赖 hashCode()和equals()方法来区分存入的元素是否相同, 来保证存储元素唯一性 。这两个方法(可自动生成)的执行顺序: 首先判断元素的 hashCode()值是否相同 否:直接存储到集合 是:继续执行equals(),看其返回值 true: 说明元素相同,就不存储 false:说明元素不同,就存储到集合 2.1.1. LinkedHashSet 底层数据结构由哈希表和链表组成。 哈希表保证元素的唯一性,链表保证元素有序(存储和取出一致)。 允许使用 null 元素,(只能有一个null) 2.2. TreeSet 底层数据结构是红黑树。(是一种自平衡的二叉树结构) 元素的唯一性

数据结构之散列表(新手文章,勿进)

二次信任 提交于 2019-11-27 15:09:15
基本理解 ​ 这是一种一对一的关系,不同于之前学的,它没有多大的逻辑关系,通过关键字来索引 散列函数 ​ 可以用于加密,从数据量大的地方获取一小段数据 分离链接法 ​ 使用链表,将散列到同一个值的元素保留在同一个链表中 /** * */ package little_class; import java.util.LinkedList; import java.util.List; /** 1 * @author 梅肺 */ public class SeperateChiningHashTable<E> { public SeperateChiningHashTable() { // TODO Auto-generated constructor stub this(DEFAULT_TABLE_SIZE); } public SeperateChiningHashTable(int size){ theLists = new LinkedList[nextPrime(size)]; //???在是什么构造方法 for (int i = 0; i < theLists.length; i++) { theLists[i] = new LinkedList<>(); } } public void insert(E x) { List<E> whichList = theLists

Java文件IO线程setmap

ⅰ亾dé卋堺 提交于 2019-11-27 14:53:16
Collection父接口 List(特点:有序的,可以重复) ArrayList 数组 适合遍历查找 LinkedList 链表 适合添加删除 Vector 数组 Stack 数组(栈)先进后出 Set 特点:无序 不能重复 HashSet 哈希表(数组 链表 二叉树) 重复依据:执行hashCode()来计算存储位置 执行equals来比较结果 LinkedHashSet 哈希表 可以保证顺序 (输入顺序) TreeSet 自平衡红黑二叉树 元素要实现Comparable接口 或者定制比较器Comparator 重复依据:Comparable接口的compareTo方法的返回时0,或比较器的返回为0 Map 存储键值对 一个键对应一个值 键不可重复 值可以重复 无序 HashMap 哈希表 执行hashCode()来计算存储位置 执行equals比较结果 Hashtable 哈希表 不能存储null键和null值,线程安全 jdk1.0 LinkedHashMap 哈希表 可以保证顺序 TreeMap 自平衡红黑树 key要实现Comparable接口 或者定制比较器Comparator 总结 : Hash开头的都是哈希表结构(如果不是基本数据类型,对象的都要用HashCode()来计算存储位置,执行equals来比较结果),Linded开头的都可以实现顺序

Java 数据结构

生来就可爱ヽ(ⅴ<●) 提交于 2019-11-27 14:52:30
Java工具包提供了强大的数据结构。在Java中的数据结构主要包括以下几种接口和类: 枚举(Enumeration) 位集合(BitSet) 向量(Vector) 栈(Stack) 字典(Dictionary) 哈希表(Hashtable) 属性(Properties) 以上这些类是传统遗留的,在Java2中引入了一种新的框架-集合框架(Collection),我们后面再讨论。 枚举(Enumeration) 枚举(Enumeration)接口虽然它本身不属于数据结构,但它在其他数据结构的范畴里应用很广。 枚举(The Enumeration)接口定义了一种从数据结构中取回连续元素的方式。 例如,枚举定义了一个叫nextElement 的方法,该方法用来得到一个包含多元素的数据结构的下一个元素。 Java Enumeration接口 Enumeration接口中定义了一些方法,通过这些方法可以枚举(一次获得一个)对象集合中的元素。 这种传统接口已被迭代器取代,虽然Enumeration 还未被遗弃,但在现代代码中已经被很少使用了。尽管如此,它还是使用在诸如Vector和Properties这些传统类所定义的方法中,除此之外,还用在一些API类,并且在应用程序中也广泛被使用。 下表总结了一些Enumeration声明的方法: 序号 方法描述 1 boolean

redis哈希表数据类型键的设置

核能气质少年 提交于 2019-11-27 13:15:25
命令名称: hset 语法:hset key field value 功能: 1)将哈希表key中的域field的值设为value。 2)如果key不存在,一个新的哈希表被创建并进行hset操作。 3)如果域field已经存在于哈希表中,旧值将被覆盖。 返回值: 1)如果field是哈希表中的一个新建域,并且值设置成功,返回1。 2)如果哈希表中域field已经存在且旧值已被新值覆盖,返回0 命令名称: hsetnx 语法:hsetnx key field value 功能: 1)将哈希表key中的域field的值设为value,当且仅当域field不存在。 2)如果key不存在,一个新的哈希表被创建并进行hsetnx操作。 3)如果域field已经存在于哈希表中,该操作无效。 返回值: 1)设置成功,返回1。 2)如果哈希表中域field已经存在且没有操作被执行,返回0 命令名称: hmset 语法:hmset key field value [field value……] 功能: 1)同时将多个field-value(域-值)对设置到哈希表key中。 2)此命令会覆盖哈希表中已存在的域。 3)如果key不存在,一个空的哈希表被创建并执行hmset操作。 返回值: 1)设置成功,返回OK。 2)当key不是哈希表(hash)类型时,返回一个错误。 命令名称: hincrby 语法

Lua性能优化

和自甴很熟 提交于 2019-11-27 13:11:52
原文: Lua Performance Tips    基础实例 像其他任何编程语言一样,在Lua中,我们也要遵守以下两条优化程序的规则: 规则1 :不要优化。 规则2 :仍然不要优化(专家除外)   当用Lua编程时,这两条规则显得尤为重要。Lua以性能著称,而且在脚本语言中也因此而值得赞美。   然而,我们都知道性能是编程的一个关键因素。具有复杂指数时间的问题被称作疑难问题并不是偶然发生。太迟的结果是无用的结果。因此,每个优秀的程序员应该总是在花费资源去优化一段代码的代价和这段代码在运行代码时节约资源的收益相平衡。一个优秀的程序员关于优化的第一个问题总是会问:“程序需要优化吗?”如果答案是肯定的(仅当此时),第二个问题应该是:“哪地方?”   为了回答这两个问题我们需要些手段。我们不应该在没有合适的测量时尝试优化软件。大牛和菜鸟之前的不同不是有经验的程序员更好的指出程序的一个地方可能耗时:不同之处是大牛知道他们并不擅长那项任务。   最近几年,Noemi Rodriguez和我用Lua开发了一个CORBA ORB(Object Request Broker)原型,后来进化成OiL(Orb in Lua)。作为第一个原型,以执行简明为目标。为了避免引用额外的C语言库,这个原型用一些计算操作分离每个字节(转化成256的基数)。不支持浮点数。因为CORBA把字符串作为字符序列处理

数据分布

有些话、适合烂在心里 提交于 2019-11-27 12:52:34
数据分布 哈希分布 顺序分布 哈希分布   哈希分布就是将数据计算哈希值之后,按照哈希值分配到不同的节点上。例如有 N 个节点,数据的主键为 key,则将该数据分配的节点序号为:hash(key)%N。   传统的哈希分布算法存在一个问题:当节点数量变化时,也就是 N 值变化,那么几乎所有的数据都需要重新分布,将导致大量的数据迁移。 顺序分布   将数据划分为多个连续的部分,按数据的 ID 或者时间分布到不同节点上。例如 User 表的 ID 范围为 1 ~ 7000,使用顺序分布可以将其划分成多个子表,对应的主键范围为 1 ~ 1000,1001 ~ 2000,…,6001 ~ 7000。 顺序分布相比于哈希分布的主要优点如下: 能保持数据原有的顺序; 并且能够准确控制每台服务器存储的数据量,从而使得存储空间的利用率最大。 来源: https://blog.csdn.net/yjn1995/article/details/99674203

20190815-阿里天猫淘宝数据库部门-一面

别等时光非礼了梦想. 提交于 2019-11-27 10:56:32
1.从100万条数据中找出最小的100条数据 top-k算法:可用大顶堆实现 2.内存中栈和堆的区别? 3.进程池的作用? 4.二叉查找树的实现,查找时间复杂度是多少? 5.两个有序数组的合并(时间复杂度是多少?) 6.数据库索引都有哪些?主键索引底层是怎么实现的? 7.哈希表是怎么实现的?解决哈希冲突的方式? 链表法怎么实现哈希查找?如果链表很长怎么办? 开放地址法怎么确定地址以及怎么实现哈希查找? 使用多个哈希函数法怎么确定映射地址?怎么实现哈希查找? 8.编程题 最短路径算法:Dijkstra算法 快速排序算法 两个有序数组的合并 二叉查找树的查找和插入 来源: https://www.cnblogs.com/hy4201/p/11360686.html

BZOJ 4943: [Noi2017]蚯蚓 字符串哈希

自作多情 提交于 2019-11-27 10:56:21
title BZOJ 4943 LUOGU 3823 简化题意: 给出 \(n\) 个字符,初始每个字符单独成字符串。支持 \(m\) 次操作,每次为一下三种之一: 1 i j :将以 \(i\) 结尾的串和以 \(j\) 开头的串连到一起。 2 i :将 \(i\) 所在串从 \(i\) 位置和 \(i\) 下一个位置之间断开。 3 S k :对于字符串 \(S\) 每个长度为 \(k\) 的子串,统计它在这 \(n\) 个字符组成所有字符串中出现的次数,求所有统计结果的乘积模 \(998244353\) 的结果。 \(n\leqslant 2×10^5\) , \(m\leqslant 5×10^5\) , \(\sum|S|\leqslant 10^7\) , \(k\leqslant 50\) , 2 i 操作次数 \(c\leqslant 1000\) 。 analysis 读过题目,大佬直觉要用链表模拟蚯蚓队列,蒟蒻看过题解方可知道(逃。 解释一下三个操作的具体做法: 对于每一个1号操作,计算所有新增的,长度在50以内的子串的哈希值,并加入哈希表中。 对于每一个2号操作,计算所有被切断的,长度在50以内的子串的哈希值,并在哈希表中除去。 对于每一个3号操作,计算每个子串的哈希值,并在哈希表中找到它们的出现次数,并相乘得到答案。 哈希表就默认都会了,那么就来分析一下复杂度