数据结构
文章平均质量分 64
追梦青苹果
这个作者很懒,什么都没留下…
展开
-
时间复杂度o(1), o(n), o(logn), o(nlogn)
1、时间复杂度o(1), o(n), o(logn), o(nlogn)。算法时间复杂度有的时候说o(1), o(n), o(logn), o(nlogn),这是算法的时空复杂度的表示。不仅仅用于表示时间复杂度,也用于表示空间复杂度。O后面的括号中有一个函数,指明某个算法的耗时/耗空间与数据增长量之间的关系。其中的n代表输入数据的量。 大O描述的是算法的运行时间和输入数据之间的关系。2、时间复杂度为O(1)。 是最低的时空复杂度了,也就是耗时/耗空间与输入数据大小无关,无论输入数据...原创 2022-04-07 06:36:13 · 445 阅读 · 1 评论 -
合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]提示:两个链表的节点数目范围是 [0, 50]-100 <= Node.val <= 100l1 和 l2 均按 非递减顺序 排列j..原创 2022-01-27 13:47:09 · 217 阅读 · 0 评论 -
遍历一次单链表找到中间节点 (java实现)
给定一个头结点为 head的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next .原创 2022-01-26 17:34:07 · 649 阅读 · 0 评论 -
删除有序数组中的重复元素II
79.删除有序数组中的重复元素II一、题目描述给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷转载 2022-01-21 15:00:50 · 180 阅读 · 0 评论 -
LeetCode: 26. 删除排序数组中的重复项(Java)
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为:你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度 5, 并且原数组 nums ...转载 2021-08-09 17:38:57 · 82 阅读 · 0 评论 -
用两个队列实现栈(java)
1 实现原理介绍 当需要插入元素时,总是将新元素插入到那个空的队列中,然后再将另一个有数据的队列中的数据,取出插入到存放新元素的队列中,即可完成栈的功能。**注意,每次执行完一次操作,两个队列中,只有一个队列有数据,要么是A,要么是B。**下面画图介绍具体过程:插入元素1此时有数据的是队列A。插入元素2此时有数据的是队列B。插入元素3此时有数据的队列A。删除栈顶元素,pop操作2 java代码实现import jav...原创 2021-08-09 15:02:40 · 812 阅读 · 2 评论 -
合并两个有序链表(https://leetcode-cn.com/problems/merge-two-sorted-lists/)
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]代码实现如下:/** * Definition for singly-linked list. * public class ListNo...原创 2021-08-09 11:05:26 · 93 阅读 · 0 评论 -
双向链表代码实现和详解—java实现
目录 一 .双向链表的优点 二 .插入 三 .遍历 四 .删除 五 .代码清单 六 .总结双向链表的优点 传统的链表沿着链表的反向遍历是困难的,以及操作某个节点的前一个元素,也是十分的困难。 双向链表提供了这些能力,即可以向前遍历,也可以向后遍历。其中实现在于每个链节点有两个指向其它节点的引用。一个指向前驱节点,一个像传统链表一样指向后继节点。如图: 双向链表的节点类是这样声明的:class Link <T>{ public T...转载 2021-08-06 11:29:48 · 150 阅读 · 0 评论 -
二叉树的前序遍历,中序遍历,后序遍历(Java实现)
1.前序遍历 前序遍历(DLR,lchild,data,rchild),是二叉树遍历的一种,也叫做先根遍历、先序遍历、前序周游,可记做根左右。前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问 根结点,然后遍历左子树,最后遍历右子树。若 二叉树为空则结束返回,否则:(1)访问根结点。(2)前序遍历左子树 。(3)前序遍历右子树 。 前序遍历需要注意的是:遍历左右子树时仍然采用前序遍历方法。如右图...转载 2021-08-06 17:20:41 · 554 阅读 · 0 评论 -
HashMap使用对象作为key实现
HashMap在使用可变对象作为key是一件很危险的事情我们开始一个简单的实例class People{ private String name; private int age; public People(){ } public People(String name, int age) { this.name = name; this.age = age; }}public class Main {...转载 2021-04-23 07:50:35 · 1683 阅读 · 0 评论 -
什么是阻塞队列(BlockingQueue)?
文章目录什么是阻塞队列(BlockingQueue)?项目环境1.阻塞队列(BlockingQueue)2.生产者消费者模式3.阻塞队列的优点3.1 降低多线程开发的难度3.2 隔离代码,实现业务代码解耦4.阻塞队列的特点4.1 take 方法4.2 put 方法4.3 是否有界5.参考项目环境jdk 1.8github 地址:https://github.com/huajiexiewenfeng/java-concurrent本章模块:blockingqueue1..转载 2021-04-20 15:38:30 · 165 阅读 · 0 评论 -
Java 实现栈的三种方式
栈:LIFO(后进先出),自己实现一个栈,要求这个栈具有push()、pop()(返回栈顶元素并出栈)、peek()(返回栈顶元素不出栈)、isEmpty()这些基本的方法。一、采用数组实现栈提示:每次入栈之前先判断栈的容量是否够用,如果不够用就用Arrays.copyOf()进行扩容import java.util.Arrays;/*** 数组实现栈* @param <T>*/class Mystack1<T> { //实现栈的数组 ...转载 2021-04-20 12:39:18 · 496 阅读 · 0 评论 -
Java队列实现
Java队列实现YO_RUI 2017-09-19 11:42:26 11070 收藏 21分类专栏: 数据结构 java 文章标签: java 数据结构 队列版权一、队列简单介绍队列是一种常用的数据结构之一,与之前的栈类似,不过队列是“先进先出”。队列有队头(front)和队尾(rear),数据从队尾进入队列,从队头出队列,队头(front)指向队列的第一个数据,队尾(rear)指向队列中的最后一个数据。二、队列实现队列有很多种,这里只是介绍最基本的实现,采用链式存储,也就是链式队..转载 2021-04-20 11:17:03 · 326 阅读 · 0 评论 -
java数据结构与算法之双链表设计与实现
java数据结构与算法之双链表设计与实现java数据结构与算法之顺序表与链表设计与实现分析java数据结构与算法之双链表设计与实现java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制)java数据结构与算法之栈(Stack)设计与实现java数据结构与算法之队列(Queue)设计与实现java数据结构与算法之递归思维(让我们更通俗地理解递归)java数据结构与算法之树基本概念及二叉树(BinaryTre.转载 2021-04-19 23:21:26 · 103 阅读 · 0 评论 -
Java基础--单链表的实现
Java内部也有自己的链表--LinkedList,但是我们今天不是讨论LinkedList,而是自己来实现一个单链表,包括简单的增删查改:单链表的结构单链表的基本操作虚拟头结点的使用整个类的设计如下:public class Linked <T>{ private class Node{ private T t; private Node next; public Node(T t,Node next){...转载 2021-04-16 22:55:48 · 152 阅读 · 0 评论 -
HashMap底层实现原理及面试问题
①HashMap的工作原理HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap使用链表来解决碰撞问题,当发生碰撞了,对象将会储存在链表的下一个节点中。 HashMap在每个链表节点中储存键值对对象。当两个不同的键对象的hashco...原创 2021-04-16 17:22:22 · 61 阅读 · 0 评论