![](https://img-blog.csdnimg.cn/20190927151101105.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
四大件之数据结构和算法
文章平均质量分 68
四大件之数据结构和算法,介绍常用的数据结构和算法。
trigger333
When you work, work. When you laugh, laugh.
展开
-
JDK1.8 HashMap源码解析 (扩容机制,null键,与1.7的区别等)
hashmap支持null键吗?当扩容的时候,所有元素都会 rehash吗?怎么减少扩容次数为什么node数组的大小是2的n次?原创 2023-12-03 12:38:31 · 191 阅读 · 0 评论 -
二分:找一个数,找左右边界
几个比较常用的二分查找场景:在排序数组里寻找一个数、寻找一个数的左侧边界、寻找一个数的右侧边界。找值在有序数组中找某一个值 有就返回索引 没有返回-1.可能有多个重复的值。int binarySearch(int[] nums, int target) { int left = 0; int right = nums.length - 1; // 注意 while(left <= right) { int mid = left + (r原创 2022-05-28 21:55:21 · 170 阅读 · 0 评论 -
二叉树 平衡树 搜索树 AVL树 红黑树 B树 B+树
为了解决二叉树数据有序时出现的线性插入树太深问题,树的深度会明显降低,虽然极大提高性能,但是当数据量很大时,一般mysql中一张表达到3-5百万条数据是很普遍,因此平衡二叉树的深度会非常大,mysql读取时会消耗大量IO。不仅如此,计算机从磁盘读取数据时以页(4KB)为单位的,每次读取4096byte。平衡二叉树每个节点只保存了一个关键字(如int即4byte),浪费了4092byte,极大的浪费了读取空间。...原创 2022-03-08 15:53:53 · 453 阅读 · 0 评论 -
LFU Java代码 方便记忆和理解
方便记忆和理解的LFU Java代码目录LFU简介put逻辑代码(结合了两份代码的优点)LFU简介LFU 算法相当于是淘汰访问频次最低的数据,如果访问频次最低的数据有多条,需要淘汰最旧的数据。最不经常使用(LFU) LeastFrequentlyUsedput逻辑参考 labuladong代码(结合了两份代码的优点)算法题就像搭乐高:手把手带你拆解 LFU 算法力扣结合了两份代码的优点:labuladong代码好理解,不过用了...原创 2022-03-07 17:25:43 · 313 阅读 · 0 评论 -
LRU实现 Java 两种版本(使用自带LinkedHashMap和自己构造LinkedHashMap)
LRU简介LRU 算法就是一种缓存淘汰策略计算机的缓存容量有限,如果缓存满了就要删除一些内容,给新内容腾位置。但问题是,删除哪些内容呢?我们肯定希望删掉哪些没什么用的缓存,而把有用的数据继续留在缓存里,方便之后继续使用。那么,什么样的数据,我们判定为「有用的」的数据呢?LRU 的全称是 Least Recently Used,也就是说我们认为最近使用过的数据应该是是「有用的」,很久都没用过的数据应该是无用的,内存满了就优先删那些很久没用过的数据。当然还有其他缓存淘汰策略,比如不要按访问的时序来淘汰,原创 2022-03-07 16:21:53 · 998 阅读 · 0 评论 -
动态规划之子序列问题
300.最⻓递增⼦序列class Solution { public int lengthOfLIS(int[] nums) { if(nums.length == 0) return 0; int[] dp = new int[nums.length]; int res = 0; Arrays.fill(dp, 1);// 默认是1 for(int i = 0; i < nums.lengt...原创 2022-03-07 11:48:47 · 586 阅读 · 0 评论 -
回溯算法 经典题目收录
以回溯算法的经典题目作为一个专栏。主要参考:代码随想录 Leetcode回溯算法是什么?采用试错的思想,它尝试分步的去解决一个问题。在分步解决问题的过程中,当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候,它将取消上一步甚至是上几步的计算,再通过其它的可能的分步解答再次尝试寻找问题的答案。回溯法通常用最简单的递归方法来实现,在反复重复上述的步骤后可能出现两种情况:找到一个可能存在的正确的答案;在尝试了所有可能的分步方法后宣告该问题没有答案。回溯法,⼀般可以解决..原创 2022-03-02 22:20:30 · 185 阅读 · 0 评论 -
排列问题 全排列I 全排列II
46.全排列要用used 数组标定本层是否选过某个数字了,那么在下一次就跳过它。class Solution { List<List<Integer>> res = new ArrayList<>(); public List<List<Integer>> permute(int[] nums) { int len = nums.length; // 使用原创 2022-03-02 21:58:49 · 166 阅读 · 0 评论 -
⼦集问题:⼀个N个数的集合⾥有多少符合条件的⼦集
第78题. ⼦集class Solution { List<Integer> t = new ArrayList<Integer>(); List<List<Integer>> ans = new ArrayList<List<Integer>>(); //[[1,2,3],[1,2, ],[1,3, ],[1, , ],[2,3, ],[2, , ],[3, , ].原创 2022-03-02 21:36:17 · 163 阅读 · 0 评论 -
切割问题:⼀个字符串按⼀定规则有⼏种切割⽅式
131.分割回⽂串class Solution { List<List<String>> res = new ArrayList<>(); List<String> tmp = new ArrayList<>(); public List<List<String>> partition(String s) { dfs(s); ..原创 2022-03-02 17:08:23 · 199 阅读 · 0 评论 -
组合问题:N个数⾥⾯按⼀定规则找出组合
组合问题:N个数⾥⾯按⼀定规则找出k个数的集合给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。k==n,只有一个结果。因为组合不考虑顺序。如果是返回结果有多少种,利用组合公式即可。class Solution { List<List<Integer>> res = new ArrayList<>(); public List<List<Intege.原创 2022-03-02 16:43:22 · 386 阅读 · 0 评论 -
NC119 最小的K个数
目录题目描述解法1:排序+取值解法2:大根堆题目扩展前k个最大的数要求不能重复题目描述解法1:排序+取值数组排序后取前k个值,注意特殊情况的判断,比如input数组长度比k还小比如,那就返回整个数组即可。import java.util.*;public class Solution { public ArrayList<Integer> GetLeastNumbers_Solution(int [] input...原创 2022-02-17 10:55:03 · 219 阅读 · 0 评论 -
二叉树题目经典模板(前中后层4种遍历 )
前中后的区别就在于 遍历根的顺序 1.先遍历根就是先序,先遍历左,后遍历右,中间遍历根就是中序,同理最后遍历根就是后序。2.左右节点的顺序总是先左后右。前中后序的遍历用到了dfs的思想,先遍历到底再往回返,用到的数据结构是栈。// 先序public void dfs(TreeNode root) { if (root == null) return ; System.out.println(root.val); dfs(root.left); dfs(ro原创 2022-02-15 16:50:12 · 336 阅读 · 0 评论 -
链表题目汇总(反转链表 回文链表 链表中点)
目录链表全部反转链表从m到n反转链表中点回文链表反转链表是面试中经常会问到的题目,可以作为模板理解后记忆。主要有两道,一个是将一个链表全部反转,一个是将链表的m到n个节点反转。这些模板可以应用在很多题目中比如234. 回文链表https://leetcode-cn.com/problems/palindrome-linked-list/链表全部反转public class Solution { public ListNode ReverseList.原创 2022-02-15 11:01:18 · 124 阅读 · 0 评论 -
Java算法代码模板整理 通用篇
目录常规代码模板核心代码模式ACM模式map set 遍历自定义比较器建立大跟堆、小根堆常规代码模板核心代码模式函数名,输入参数,输出参数类型都已经写好,只需要写函数体即可。ACM模式啥都没有,需要自己写这里提供一个模板,主要是读入示例,自己构建出输入参数,那么就可以转化为核心代码模式了,方便过渡。读入大致是分为两类,数字和字符串。import java.util.*;public class Main { public.原创 2022-02-15 09:57:15 · 1135 阅读 · 0 评论