leetcode数据结构
文章平均质量分 75
Prayer96
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
树的层次遍历相关leetcode
树的层次遍历相关leetcodeNo.102 二叉树的层序遍历思路:创建一个list类型的result接收最后的结果。创建一个队列,将每一层的元素入队。先将根节点入队,while循环队列不为空,计算队列的长度size,循环判断size>0,依次出队size个元素直到size等于0,依次将出队的元素存入list类型的临时变量list中,然后将list加入到result中。返回result。/** * Definition for a binary tree node. * public cla原创 2021-04-03 21:12:26 · 265 阅读 · 0 评论 -
前缀和相关leetcode
前缀和相关leetcode前缀和即元素i前面的元素和,包括元素i。No.724 寻找数组的中心下标class Solution { public int pivotIndex(int[] nums) { if(nums == null || nums.length == 0) return -1; int[] sum = new int[nums.length]; sum[0] = nums[0]; for原创 2021-04-03 20:58:18 · 305 阅读 · 0 评论 -
leetcode算法-递归
递归函数直接或间接地调用自己。生活中的例子从前有座山的故事。从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚在给小和尚讲故事:从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚在给小和尚讲故事:。。。4个要素接受的参数返回值递归终止条件递归拆解:如何递归到下一层斐波拉契数列0,1,1,2,3,5,8…f(n) = f(n - 1) + f(n - 2),其中f(0) = 0,f(1) = 1recursion(int n) { if(n < 2) return原创 2021-03-22 09:36:31 · 270 阅读 · 0 评论 -
leetcode算法-滑动窗口
滑动窗口目的:减少while循环的次数目标题型:数组定长问题,比如求数组中k个数为一组最大的和/最小的和例子:给定一个数组,数组中三个数为一组,求最大和。常规方法:将指针指向数组的第一位,求该元素和后两个元素的和;然后移动指针到第二位,求和;直到数组的最后三位求和为止。这样做每次都是三个数相加,会有重复的相加过程,比如第一轮和第二轮求和都要将第二位和第三位数相加。滑动窗口法:第一轮求前三位数的和,然后第二轮将之前的和减去第一位数,再加上第四位数,以此类推,每轮只需要减去一个数,再加上一个数。原创 2021-03-18 21:59:06 · 292 阅读 · 0 评论 -
leetcode算法-二分查找法
二分查找法例子:猜数字猜100以内的一个数字,先猜50,大了就锁定范围1-49,小了就锁定范围51-100。以此类推,每次猜中间的数来锁定范围,直到猜出数字。例子:数组搜索元素给定一个有序数组,搜索数组重是否存在某个元素。如果使用遍历,时间复杂度是O(N)。如果使用二分查找发,时间复杂度是O(log2Nlog_2Nlog2N),因为每次排除一半的元素。特点查找的元素必须有序。二分查找法相关leetcodeNo.704 二分查找思路:先判断数组是否为空,是则返回-1。然后定义左指针和右指针原创 2021-03-12 20:25:23 · 510 阅读 · 0 评论 -
leetcode常用算法-双指针
双指针普通双指针:两个指针往一个方向移动对撞双指针:两个指针面对面移动快慢双指针例子普通双指针i=0,j从1开始遍历,判断两数之和是否为12。然后i=1,j从2开始遍历判断和是否为12,以此类推,直到找到两数之和为12为止。这里i和j往同一个方向移动,都要遍历数组,因此时间复杂度为O(N2N^2N2)对撞双指针i=0,j=4开始遍历,此时和为10<12,说明需要更大的数相加才可能使得和为12,而j已经指向了数组中最大的数,因为这是一个有序数组,因此i需要向右移动才可能使得和更大。i=原创 2021-03-12 17:41:55 · 229 阅读 · 0 评论 -
Java图基本知识及数据结构回顾
图Graph与树不同,图里面的节点与节点之间可能不止一条路径。图分为点和边,点称为顶点,相邻的点称为邻居节点。度:顶点连着的边的条数无向图:边没有方向有向图:边有方向入度:有几条边指向该节点初度:有几条边从该节点指向其它节点权重图:边上有权重,一般用于求解最短路径, 常用方法有贝尔曼-福特算法Bellman-Ford和迪克斯特拉算法Dijkstra数据结构回顾数组读多写少访问和更新的时间复杂度是O(1)搜索的时间复杂度是O(N)插入和删除的时间复杂度是O(N)链表写多原创 2021-03-11 17:55:24 · 188 阅读 · 0 评论 -
Java堆常用操作及相关leetcode算法题
堆Heap堆是一种完全二叉树且满足以下条件:每个节点都大于等于孩子节点,称为最大堆,堆顶元素最大每个节点都小于等于孩子节点,称为最小堆,堆顶元素最小判断数据结构的好坏要对比四个操作1、访问Access堆没有索引的概念,不存在访问的操作。2、搜索Search一般只搜索堆顶元素,时间复杂度为O(1)。如果要搜索任意元素,时间复杂度为O(N)。3、插入Insert插入一个元素,先插入在二叉树的下一个位置,然后比较该元素和父节点,如果大于父节点,进行交换,直到小于父节点为止。因为只需要和父节点原创 2021-03-11 16:28:46 · 285 阅读 · 0 评论 -
JavaTree常用操作及相关leetcode算法题
Tree树描述的是节点之间的父子关系节点:树中的每一个元素根节点:树中最上层的唯一的节点叶子节点:没有孩子的节点高度:从最底层算起,从0开始深度:从最高层算起,从0开始层:从最高层算起,从1开始二叉树普通二叉树:每个节点最多两个孩子满二叉树:除了叶子节点,每个节点都是两个孩子,并且所有叶子节点都在一层。完全二叉树:从根节点起,从上到下,从左到右,依次填满节点形成的二叉树满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树遍历根据根节点的访问顺序分为前中后,左右子树都是依次遍历的。原创 2021-03-11 11:08:40 · 468 阅读 · 0 评论 -
JavaSet集合常用操作及相关leetcode算法题
Set特点:1、无序,元素的顺序不是按照插入的顺序,也不是根据大小来排序。2、不重复。插入元素时先比较哈希值,不同则插入,相同再调用equals方法比较,不同则是哈希冲突,可以通过链表法或再哈希法等方法解决,否则插入失败。主要作用:1、判断某个元素是否存在2、判断元素是否重复。将一组数插入集合,比较插入前的元素个数和集合的长度。leetcode大部分使用的是HashSet,偶尔会用到TreeSet。HashSet插入元素时,先通过哈希函数得到哈希值,判断哈希值在哈希表中对应位置是否已经存在原创 2021-03-11 10:14:54 · 313 阅读 · 0 评论 -
Java哈希表常用操作及相关leetcode算法题
哈希表以键值对的形式存储存储:将key通过哈希函数映射到一个内存地址,然后将value存入该内存地址获取:通过key传入哈希函数得到内存地址,将value取出来哈希冲突:不同的key传入哈希函数得到的内存地址一样解决:以链表的形式存储统一内存地址的value,要获取值时先定位到内存地址,再遍历链表判断数据结构的好坏要对比四个操作1、访问Access哈希表没有索引的概念,不存在访问的操作。2、搜索Search时间复杂度是O(1)。将key传入哈希函数得到内存地址,取出value。如果有哈原创 2021-03-10 17:43:21 · 356 阅读 · 0 评论 -
Java栈常用操作及相关leetcode算法题
栈先进后出,后进先出。只有一个口。例子:浏览器的页面前进后退操作。判断数据结构的好坏要对比四个操作1、访问Access时间复杂度是O(1),只能访问栈顶的元素。2、搜索Search时间复杂度是O(N)。需要遍历才能找到对应的元素。3、插入Insert时间复杂度是O(1)。只能在栈顶插入元素。4、删除Delete时间复杂度为O(1)。只能在栈顶删除元素。Java链表常用操作1、创建栈Stack<Integer> stack = new Stack<>();原创 2021-03-09 17:07:29 · 534 阅读 · 0 评论 -
Java队列常用操作及相关leetcode算法题
单端队列leetcode中大部分是使用单端队列,一个口进,一个口出底层使用链表实现判断数据结构的好坏要对比四个操作1、访问Access时间复杂度是O(N),需要遍历才能找到要访问的元素。2、搜索Search时间复杂度是O(N)。和访问一样,也是需要遍历才能找到对应的元素。3、插入Insert时间复杂度是O(1)。只能在队尾插入元素。4、删除Delete时间复杂度为O(1)。只能在队头删除元素。Java链表常用操作1、创建队列Queue<Integer> queue =原创 2021-03-09 14:56:29 · 311 阅读 · 0 评论 -
Java链表常用操作及相关leetcode算法题
单链表leetcode中使用单链表就足够了。判断数组结构的好坏要对比四个操作1、访问Access时间复杂度是O(N),因为链表的存储位置不是连续的,需要遍历才能找到要访问的元素。2、搜索Search时间复杂度是O(N)。和访问一样,也是需要遍历才能找到对应的元素。3、插入Insert时间复杂度是O(1)。在位置2和3之间插入元素5,只需要将2的next指针指向5,将5的next指针指向3即可。4、删除Delete时间复杂度为O(1)。删除位置3,只需要将2的指针指向4即可。Java链表原创 2021-03-09 11:41:23 · 235 阅读 · 0 评论 -
Java数组常用操作及相关leetcode算法题
1、创建已知数组元素int [] array = {1, 2, 3}int [] array = new int[]{1, 2, 3};已知数组长度int [] array = new int[3];使用ArrayList,不用确定长度和元素AraayList<Integer>list = new ArrayList<>();2、添加元素前三种创建数组的方法要添加元素,需要新建一个长度更长的数组,这里使用ArrayList的方法默认在尾部添加元素list.add原创 2021-03-08 14:45:46 · 421 阅读 · 0 评论
分享