数据结构
豆浆油条_煎bingo子
2646507129
展开
-
哈希-碰撞
在生成哈希值时,两个不同的键可能会生成相同的哈希值,我们不能在同一索引中存储两个项目,这就产生了碰撞。现在有两种方法解决碰撞问题1. 让数组中的每个单元格指向一个链接列表,我们不会把值存储在数组本身,而是存储在这个链接列表中如果发生碰撞,我们只需要在链接列表的末尾添加新项2.找另一个地方来保存第二个值 ,也叫作开放寻址,我们正在寻找一个新地址来存储第二个值现在我们来看看链接列表模式假设哈希表的大小是5,有5个用来存储的单元,现在要在哈希表中存储这个键值对k=6,v=A我们给散.原创 2020-10-28 21:20:12 · 348 阅读 · 0 评论 -
找到第一个重复的字符
找到第一个重复的字符例如:a happy piga 重复2次h 重复1次p 重复3次y 重复1次g 重复1次i 重复一次编写一个返回第一个重复字符a的方法我们要使用到一种数据结构来快速查找值,显然我们可以使用哈希表,所以我们的键key是字符,但这些键对应的值是什么呢?在这种情况下,我们并不关心每个字符被重复的次数,因为我们只想找到第一个不重复的字符,所以对于这个特殊的练习,我们可以使用Set,集合只有键,没有值,像映射一样不允许重复的键.我们迭代字符串,如果出现该字符,则直接返回该字原创 2020-09-25 16:14:07 · 455 阅读 · 0 评论 -
找到第一个不重复的字符
找到第一个不重复的字符例如:a happy piga 重复2次h 重复1次p 重复3次y 重复1次g 重复1次i 重复一次编写一个返回第一个不重复字符h的方法什么样得数据结构最适合快速查找项目?可以使用哈希表存储每个字符及其重复的次数。1.构建哈希表2.迭代字符串3.得到当前字符串并查找它重复的次数4.是重复就忽略,继续查询下一个字符空格重复了两次,继续下一个然后到达h,是第一个不重复的字符,停止迭代并返回该字符public class CharFinder { p原创 2020-09-25 15:35:40 · 328 阅读 · 0 评论 -
哈希表/字典
一.为什么要使用哈希表?1.能够超快速的检索性能2.优化算法二.使用哈希表的场景?拼写检查使用哈希表可以在数万个单词中快速查找目标词当作字典可以快速查找一个单词并找到它在另一种语言中对应的翻译在编译器中使用编译器使用哈希表快速查找函数和变量的地址在代码编译器中使用快速查询内容在不同语言中,哈希表的叫法不一样三.什么是哈希表?以 键-值对 存储数据的结构四.哈希表的工作原理:我们使用哈希表来存储键值对,假如我们要存储一个员工列表,并能够根据员工编号快原创 2020-09-22 20:21:29 · 389 阅读 · 0 评论 -
实现优先级队列的方法-java
我们可以使用数组实现,也可以使用堆来实现使用数组来实现add()[1,3,5,7]0 1 2 3想插入2需要从末尾反向遍历这个数组,找到插入新项的位置。每次迭代会得到当前的序号,如果当前项大于我们的新增项,需要将当前项向前移动。如果当前的项小于新增项,就意味着找到插入点位置,直接break结束循环。但是到底往哪里插入呢?当我们反向遍历整个数组直到1时,1<2,所以我们找到了插入点,但不能直接items[i]=item,会覆盖掉当前值1,所以插入到当前项的右边 items[i+原创 2020-09-22 12:30:24 · 256 阅读 · 0 评论 -
构建队列-使用栈方法
如何使用一个栈来保存队列呢?队列是先进先出结构,而栈是先进后出结构,所以在单一的栈中无法实现队列模式;但是我们可以使用两个栈,将项移来移去,并在删除的时候改变他们的顺序Q[10,20,30]S1[]S2[]||||S2用来添加元素Q[10,20,30]S1[10,20,30]S2[]||||Q[10,20,30]S1[10,20,30]S2[30,20,10]||||S2用来删除元素Q[10,20,30]S1[10,20,30]S2[]使用数组方式创建一个队列,该队原创 2020-09-22 08:20:01 · 165 阅读 · 0 评论 -
构建队列--使用数组方式
使用数组方式创建一个队列,该队列有:- enqueue() 该方法在队列末尾添加元素 O(1)- dequeue() 从队列开头移出一项 O(1)- peek()得到队列第一项,但不删除 O(1)- isEmpty()- isFull准备工作创建两个指针用来标记下标位置,一个为front,一个为rear,当添加元素时,指针rear后移一位,由于要提高内存效率,于是产生了循环队列,rear并不是一味的自增,而是通过 (rear+1)%数组长度 的关系循环索引。 int[] item;原创 2020-09-21 21:00:20 · 377 阅读 · 0 评论 -
队列-反转字符串
队列-反转字符串思路:一般我们知道对字符串的反转可以使用栈,是因为栈是先进后出结构。Q [10,20,30]S []||||Q[]S[10,20,30]||||Q[30,20,10]S[]public static void reverse (Queue<Integer> queues){ Stack<Integer> stack = new Stack<>(); while (!queues.isEmpty()原创 2020-09-21 19:12:36 · 279 阅读 · 0 评论 -
根据字符串判断其括号对是否匹配-java
根据字符串判断其括号对是否匹配思路:–使用栈实现“先进后出”1.将字符串中的每个字符进行遍历2.如果是左括号将该字符压入栈中3.如果是右字符,将栈顶的左字符取出来进行匹配4.如果栈为空则返回false5.若全都匹配上,则栈为空,返回true代码优化前:public class StackExpression { public boolean Expression(String input){ Stack<Character> stack = new Stack原创 2020-09-21 08:23:00 · 818 阅读 · 0 评论 -
创建一个动态数组
创建一个动态数组,插入数据时空间增加,删除数据时空间缩小!1.插入2.删除3.查找元素,有返回索引,没有返回-1在Main方法中先new一个数组类Array,需要传一个长度参数 Array arr = new Array(3);在构造方法中new一个数组,生成一个length大小的数组private int[] item;public Array(int length){ item = new int[length]; }我们打印看看数组里面有什么–原创 2020-09-12 21:55:55 · 1434 阅读 · 0 评论