集合
无心浪人
这个作者很懒,什么都没留下…
展开
-
哈希表
概念顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。顺序查找时间复杂度为O(N),平衡树中为树的高度,即O( ),搜索的效率取决于搜索过程中元素的比较次数。除了情况4之外,其他情况可以直接删除情况4不能直接删除,需要在其子树中找一个替代节点进行删除*/// 请同学们根据上课掌握内容,完成删除的关键部分代码return true;}}101102103104105106107理想的搜索方法:可以不经过任何比较原创 2021-03-19 21:55:16 · 736 阅读 · 1 评论 -
复制带随机指针的链表
给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点通过map建立新老节点的联系class Solution { public Node c原创 2021-03-18 22:13:31 · 56 阅读 · 0 评论 -
内部类
文章目录1.实例内部类:2.静态内部类:3.匿名内部类:4.本地内部类:1.实例内部类:实例内部类: 定义在类的内部的一个类。1、如何实例化内部类对象?(可以想象成一个外部类的成员变量)OuterClass.InnerClass innerClass2 = out.new InnerClass();外部类名.内部类名 变量 = 外部类对象的引用.new 内部类();2、只要是内部类,那么生成的字节码文件格式:外部类$内部类.class3、在实例内部类当中,不能定义静态的成员变量!!如果原创 2021-03-16 15:47:52 · 59 阅读 · 0 评论 -
泛型
Object:是所有类的父类泛型的特点1、class MyStack<T> 此时的<T>代表是一个占位符 表示当前类是一个泛型类 2、 this.elem = new T[10]; 不能实例化泛型类型的数组对象 3、 MyStack<Integer> myStack = new MyStack<>(); MyStack <Integer> 这里指定当前类可以存放的数据类型 new MyStack<Inte原创 2021-03-16 14:35:43 · 63 阅读 · 0 评论 -
topk问题
找前k个最大值,建一个大小为k的小堆;找前k个最小值,建一个大小为k的大堆;思路:找前k个最大值为例先取前K个数,进行键小堆,然后依次往后遍历,每次取一个元素,然后和堆顶元素进行比较,若比堆顶元素小,则继续往后遍历,大的话,将堆顶元素与堆的最后一个元素互换,然后将最后一个元素弹出,在进行调整堆,使得堆依然是一个小根堆。再继续往后遍历,依次循环。直到遍历完为止。例如给一个数组,求数组前K个最大值 public static void topK(int[] array,int k) {原创 2021-03-14 18:03:29 · 87 阅读 · 0 评论 -
堆
1. 堆逻辑上是一棵完全二叉树2. 堆物理上是保存在数组中3. 满足任意结点的值都大于其子树中结点的值,叫做大堆,或者大根堆,或者最大堆4. 反之,则是小堆,或者小根堆,或者最小堆5. 堆的基本作用是,快速找集合中的最值操作-向下调整前提:左右子树必须已经是一个堆,才能调整。说明:1. array 代表存储堆的数组2. size 代表数组中被视为堆数据的个数3. index 代表要调整位置的下标4. left 代表 index 左孩子下标5. right 代表 index 右孩子下标原创 2021-03-14 11:12:53 · 109 阅读 · 0 评论 -
最小栈
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。思路:创建两个栈,一个普通的栈,一个存放最小元素的栈,入栈时,先放到普通栈,若入栈的元素小于等于最小栈的栈顶元素,则将这个元素也放入最小栈。出栈时先将普通栈弹出,入弹出的元素等于最小栈的栈顶元素,则最小栈也弹出;class MinStack { pr原创 2021-03-08 18:27:47 · 68 阅读 · 0 评论 -
用队列实现栈 与 用栈实现队列
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通队列的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 falseclass MyStack { private Queue<Integer> qu1 = new LinkedL原创 2021-03-07 22:10:00 · 150 阅读 · 2 评论 -
有效的括号(括号匹配)
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。遍历字符串,如果是左括号,则入栈,有括号的话看他是否与栈顶的左括号匹配,若匹配将其弹出栈,继续往后遍历字符串,当字符串遍历完且栈为空的时候,说明匹配。class Solution { public boolean isValid(String s) { Stack<Character>原创 2021-03-07 18:15:06 · 270 阅读 · 1 评论 -
用数组实现队列(循环队列)
设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。你的实现应该支持如下操作:MyCircularQueue(k): 构造器,设置队列长度为 k 。Front: 从队首获取元素。如果队列为空,返回 -1 。原创 2021-03-07 17:29:15 · 3712 阅读 · 0 评论 -
ArrayList
ArrayList底层是一个数组,每次放元素的时候放在了数组的最后。public boolean add(E e) {public void add(int index, E element) {这个方法是放在index位置问题:ArrayList底层是数组 那么他是多大??1、new ArrayList<>() 调用的是 不带有参数的构造方法, 那么大小默认为0。2、当调用饿了默认的构造方法之后,当你添加第一个元素的时候 会进行扩容,第一次扩容的时候,大小为10;3、当后续..原创 2021-03-07 11:56:02 · 116 阅读 · 1 评论 -
栈(Stack)
1.1 概念栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据在栈顶常用的方法模拟实现栈public class StackDemo { private int[] elem; private int top;//既可以代表下标:这个位置就原创 2021-03-05 21:53:41 · 1666 阅读 · 0 评论 -
杨辉三角
class Solution { public List<List<Integer>> generate(int numRows) { List<List<Integer>> ret = new ArrayList<>(); if(numRows <= 0) return ret; //第一行的list List<Integer> list = new Ar.原创 2021-03-05 20:16:20 · 183 阅读 · 0 评论 -
集合
文章目录什么是集合什么是集合<font face=楷体,size="">集合框架:用于存储数据的容器。集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。接口:表示集合的抽象数据类型。接口允许我们操作集合时不必关注具体实现,从而达到多态"。在面向对象编程语言中,接口通常用来形成规范。实现:集合接口的具体实现,是重用性很高的数据结构。算法:在一个实现了某个集合框架中的接口的对象身上完成某种有用的计算的方法原创 2021-01-24 16:45:32 · 97 阅读 · 0 评论