数据结构与算法
文章平均质量分 62
一些简单或进阶的数据结构详解
small_engineer
把学习比作游戏是再合适不过了,学习到了一点新技术,就相当于学到了新的必杀技;刷LeetCode就像打怪,一个个打过去;写项目就像搭建城堡,先从地基打起,逐渐到高楼大厦
展开
-
LRUCache简单实现
来源于LeetCode. 146. LRU 缓存 题目要求实现一个LRUCache,我们使用get时,需要额外把该节点移动到开头;我们使用put时,如果存在该节点,我们需要把该节点删除,并且插入到开头;不存在则插入到开头,此时需要判断长度是否大于给定的capacity。并且实现这两种操作时,时间复杂度都必须为O(1);get我们使用HashMap便可以达到我们的时间复杂度,但是HashMap不是有序的,但它的子类LinkedHashMap是有序的,所以我们使用LinkedHashMap便可以达到本题的效果原创 2022-06-03 13:24:06 · 792 阅读 · 1 评论 -
十大排序算法(Java版)
十大排序算法总览冒泡排序流程图Java代码复杂度分析选择排序流程图Java代码复杂度分析直接插入排序流程图Java代码复杂度分析 总览 冒泡排序 流程图 Java代码 //冒泡排序 public void bubleSort(int arr[]){ int len=arr.length; for(int i=1;i<arr.length;++i){ for(int j=0;j<len-i;++j){原创 2022-05-06 21:15:54 · 731 阅读 · 0 评论 -
474. 一和零 Java(三维0/1背包)
开始这题讲解前,需要你掌握0/1背包滚动数组版 本来看到第一眼准备用贪心的,每次取最短的字符串,不过很容易就被推翻了。便放弃了这种解法。 这题我想最难的是:想到0/1背包的贪心上面,想到了0/1背包又很难想到是个三维的0/1背包,将背包容量变成了二维。 我们将每个字符串看成是一个个物品,0和1的数量看做是它的容量.这样的话,就是一个三维的问题了,xy坐标为0和1的数量,z坐标为每个物品。依照0/1背包的滚动数组来做,本题可以转换为二维数组,因为z坐标是可以循环利用的。 dp[i][j]代表的含义为:放..原创 2022-04-14 21:22:51 · 583 阅读 · 0 评论 -
LeetCode 494.目标和(回溯+动态规划[类似0/1背包])
最近开始写动态规划了,题解都少写好多!!!为啥呢?太tm难了,有些题看了题解还要想个几小时。终究还是菜狗!! 不说了,继续写题解,加深理解 第一种解法:回溯 这个就不用我写了吧,感觉没有技术含量。用回溯我都感觉很愧疚,因为跟暴力差不多。但是没办法,不会就老老实实写这种了 class Solution { int sum=0; public int findTargetSumWays(int[] nums, int target) { int length=nums.len.原创 2022-04-14 20:01:33 · 367 阅读 · 0 评论 -
LeetCode 501. 二叉搜索树中的众数(Java版暴打官方,还有谁(前序遍历+Mirrot+两次遍历真正的O(1)))
前言 给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。 假定 BST 满足如下定义: 结点左子树中所含节点的值 小于等于 当前节点的值 结点右子树中所含节点的值 大于等于 当前节点的值 左子树和右子树都是二叉搜索树 输入:root = [1,null,2,2] 输出:[2] 如果树中有不止一个众数,可以按 任意顺序 返回。 第一种解法:前序遍历 利用二叉搜索树的性质,中序遍历一定是有序的,也就是相同的数一定会挨在一起; 我们原创 2022-04-02 19:20:03 · 907 阅读 · 0 评论 -
LeetCode 437.路径总和 III(树上玩前缀+回溯)
前言: 给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。 路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。 本题这里有两种解法: 类似暴力,可以参照113. 路径总和 II这题,只不过多了遍历整棵树这个过程而已,这种解法多了很多重复的计算 前缀和,本篇文章主要讲解这种解法 第一眼看到这个题目时,想的就是暴力或则前缀和来解决。暴力的话,感觉太low了,可是前原创 2022-03-31 00:24:06 · 291 阅读 · 0 评论 -
二叉树遍历之图解Mirror算法(莫里斯算法)
我们写二叉树的遍历时,一般有两种方式,迭代和递归。然而还有一种神奇的算法,也可以作我们的二叉树递归,且空间复杂度为O(1),要知道,我们迭代和递归都是需要额外栈空间的原创 2022-03-26 22:29:14 · 2306 阅读 · 0 评论