
数据结构和算法
文章平均质量分 57
小Leetcode~
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
DFS模板团灭矩阵中的搜索问题
DFS模板团灭矩阵中的搜索问题算法模板应用场景例题应用 算法模板 class Solution { int m,n; public T function(int[][] grid) { //行 m = grid.length; //列 n = grid[0].length; //记录结点是否访问过 boolean[][] visited = new boolean[m][n];原创 2021-09-01 21:13:28 · 328 阅读 · 0 评论 -
二叉树的非递归遍历模板
二叉树的非递归遍历非递归遍历模板前序遍历中序遍历后序遍历测试代码结果 非递归遍历模板 这个模板只适用于前序遍历和中序遍历 private static void travers(TreeNode root) { Stack<TreeNode> stack = new Stack<>(); TreeNode cur = root; while (cur!=null || !stack.isEmpty()) { if原创 2021-08-26 21:49:33 · 198 阅读 · 0 评论 -
双指针技巧框架
双指针技巧框架双指针分类快慢指针常见用法1.判断链表中是否有环2.找出链表中环的起始位置3.找到链表的中点左右指针常见用法1.二分查找2.两数之和问题3.滑动窗口 双指针分类 双指针一般分为两类:快慢指针和左右指针。 快慢指针主要解决链表问题,比如判断链表中是否有环、环的结点在哪 左右指针主要解决数组(或字符串)问题,比如二分查找,滑动窗口等。 快慢指针常见用法 1.判断链表中是否有环 boolean hasCycle(ListNode head) { ListNode fast, slow;原创 2021-08-24 16:40:21 · 189 阅读 · 0 评论 -
滑动窗口模板
滑动窗口基本思想算法模板应用场景例题应用子串子数组参考资料 基本思想 滑动窗口是双指针技巧的一种,定义两个指针,left 和 right,用 left,right 表示滑动窗口的左边界和右边界,通过改变left,right来扩展和收缩滑动窗口,可以想象成一个窗口在滑动。这就是滑动窗口的基本思想 使用滑动窗口前需要思考以下4个点: 增大窗口时,要更新哪些数据? 什么时候停止增大窗口,开始缩小窗口? 缩小窗口时,要更新哪些数据? 最后的结果在增大窗口时更新,还是缩小窗口时更新? 写滑动窗口算法前一定要明白以原创 2021-08-18 22:06:10 · 287 阅读 · 0 评论 -
BFS算法框架
BFS算法框架BFS算法描述核心思想算法本质和DFS的区别主要数据结构BFS算法框架例题应用参考资料 BFS算法描述 核心思想 BFS的核心思想就是把问题抽象成一幅图,从一个点开始,向四周围扩散 算法本质 本质就是在一幅图中找到起点 start 到终点 target 距离最短的路径 和DFS的区别 BFS找到路径一定是最短的 主要数据结构 队列 BFS算法框架 // 计算从起点 start 到终点 target 的最近距离 int BFS(Node start, Node target) { Que原创 2021-08-16 20:43:22 · 501 阅读 · 0 评论 -
二分查找模板
二分查找模板算法模板例题应用(完全套用模板)参考资料 算法模板 package com.search; /** * 二分查找 * @author: 小LeetCode~ **/ public class BinarySearch { public static void main(String[] args) { //最基本的二分查找 // int[] nums = {1,2,3,4,5,6}; // int result_mid = binar原创 2021-08-16 11:15:13 · 294 阅读 · 0 评论 -
选择、插入、冒泡、归并、快速排序
今天复习了一下排序算法,总结一下今天自己写的代码。 原理可能只是简单介绍一下,如果原理不太懂的小伙伴还是去理解一下原理,不然可能看不懂算法。 选择排序 package com.chenli.sort; import java.util.Arrays; /** * 选择排序 * 首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换...原创 2019-04-29 00:02:54 · 218 阅读 · 1 评论 -
小和问题
在一个数组中, 每一个数左边比当前数小的数累加起来, 叫做这个数组的小和。 例子: [1,3,4,2,5] 1左边比1小的数, 没有; 3左边比3小的数, 1; 4左边比4小的数, 1、 3; 2左边比2小的数, 1; 5左边比5小的数, 1、 3、 4、 2; 所以小和为1+1+3+1+1+3+4+2=16 其实小和问题就是归并排序的应用。不了解归并排序的,可以看一下这篇文章归并排序 废话不多说...原创 2019-04-30 16:30:23 · 709 阅读 · 0 评论 -
回溯框架团灭排列、组合、子集问题
回溯大集合算法框架排列组合子集总结 算法框架 看了大神的回溯算法框架文章,突然就顿悟了回溯法,自己一口气团灭排列、组合和子集问题。 文章地址:回溯算法框架 排列 LeetCode 46题 class Solution { List<List<Integer>> res = new ArrayList<>(); public List<List<Integer>> permute(int[] nums) { Link原创 2021-08-06 10:35:16 · 283 阅读 · 0 评论 -
剑指offer中的算法题:二叉树的下一个节点
题目: 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 算法解析: 如上图,中序遍历:DNHBIEJAFKCLGM 这题可以分为两种情况,有右子树和无右子树情况,有右子树的又分为两种情况,所以一共三种情况。 1、如果当前节点有右子树,则它的下一个指向右子树最左边的节点。 比如: A节点,他有右子树C,则A的下...原创 2020-02-08 22:08:38 · 168 阅读 · 0 评论 -
并查集算法详解
并查集算法,主要是解决图论中「动态连通性」问题的。 并查集的应用:判断回路(连不连通的问题)、找父节点、是不是同属于一个集合、社交网络中的朋友圈计算 一、简单介绍 Union-Find 算法主要需要实现这两个 API class UF { /* 将 p 和 q 连接 */ public void union(int p, int q); /* 判断 p 和 q 是否连通 *...原创 2019-12-08 19:51:00 · 272 阅读 · 0 评论 -
最小生成树算法
1、普利姆算法 算法思想: 1、从图中找到第一个起始顶点v0,作为最小生成树的第一个顶点,然后从这个顶点到其他顶点中选一条权值最小的边,然后把这条边的顶点vi加入和这条边加入到最小生成树中 2、对剩下顶点顶点,分别检查这些顶点与顶点v的权值是否比这些顶点的lowcost[]中的对应权值小。如果小,则更新lowcost[] 3、从更新的lowcost[]中继续挑选权值最小而且不在生成树中的边,然后加...原创 2019-10-13 00:00:22 · 372 阅读 · 0 评论 -
最短路径算法
两种经典的最短路径算法 1、迪杰斯特拉算法 算法思想:设置一个集合S记录已求得的最短路径的顶点,可以用数组s[]表示,初始化为0,当是s[vi]=1时,表示顶点vi放入S中,初始化时把v0放入S中。另外设置两个辅助数组 dist[]:记录顶点v0当其他顶点当前最短路径长度,dist[i]初始值为[v0][i]; path[]:path[i]表示从原点到顶点i之间的最短路径的前驱结点,在算法结束时,...原创 2019-10-11 20:43:07 · 462 阅读 · 0 评论 -
图的广度优先遍历和深度优先遍历
图的邻接矩阵存储结构 #define MaxVertexNum 100 typedef char VertexType;//顶点的数据类型 typedef int EdgeType;//带权边上权值的数据类型 typedef struct{ VertexType vex[MaxVertexNum];//顶点表 EdgeType edge[MaxVertexNum][MaxVerte...原创 2019-10-10 20:29:05 · 200 阅读 · 0 评论 -
线性表相关算法总结
最近在复习考研数据结构的算法,把自己做过的觉得有意思的算法做个总结。本文均采用C语言形式的算法,并且本文算法会以考研算法的流程走,即先写算法思想,再上代码。考研算法比较偏向于算法思想,所以代码部分可能存有伪代码元素,不一定能正确运行。但是关键是掌握这个算法思想,这个才是重中之中。 1、给定两个链表,编写算法找出两个链表的公共结点。 (好像是剑指offer的一道原题) 算法思想:两个链表中有公共结点...原创 2019-10-01 21:34:40 · 1498 阅读 · 0 评论