算法
文章平均质量分 72
Ch.yang
try{ coding } catch { bug }
展开
-
【算法】笔记:LeetCode 206. 反转链表
这道题可以拆成几个小点去理解,本篇博文快速记录一下。有迭代和递归两种解法。迭代的解法空间复杂度更优秀,递归的思想更巧妙。这里主要总结下迭代的解法。并简要理解下递归的解法。LeetCode 206. 反转链表。原创 2023-03-04 14:46:02 · 650 阅读 · 0 评论 -
【算法】笔记:LeetCode 3. 无重复字符的最长子串
今天写了一道题LeetCode 3. 无重复字符的最长子串,思路还是不难的。初始版本自己写的,看了别人的答案觉得自己写的太丑了。于是乎,借鉴《重构》的思想(LeetCode 提供测试用例和运行,保障重构安全,真是太好了),把自己的版本重构下,记录下过程。原创 2023-02-11 20:38:05 · 108 阅读 · 0 评论 -
【高并发基础】理解 MVCC 及提炼实现思想
MVCC 在 MySQL、Oracle、PostgreSQL 都有应用,用于实现事务的隔离特性。现在结合 《MySQL是怎样运行的》的内容理解、归纳、整理下MVCC的实现及思想。Multiversion Concurrency Control 对版本并发控制。对于同一行数据,会根据不同事务的DML操作参生不同的版本,让不同事务各自维护自己能看到的版本从而做到事务隔离。每次操作数据库都会生成日志,那么就可以把同一条记录的多次操作记录按时间顺序链接起来。按事务开启的时间顺序,为事务颁发一个Id,从而维护“版原创 2022-12-04 18:44:25 · 606 阅读 · 0 评论 -
【算法】LeetCode二分查找例题汇总(持续更新)
死循环问题仅一部分的测试用例可以通过为了避免以上问题,收敛下题目,记住解题思路。当序列中有三个元素, (下标从0开始)往 mid 的左边找可以找到答案left == 0, right == 1 (为什么不是 mid - 1 而是 mid) 因为当前Mid可能是答案,不要漏掉了。往 mid 的右边找可以找到答案left == 1, right == 2 (为什么可以是 mid + 1) 因为当前Mid不可能是答案 (答案是要找false节点,而不是true节点)原创 2021-12-31 17:05:57 · 766 阅读 · 0 评论 -
【算法】AOE网找关键活动、关键路径
关键路径是什么?整个活动网影响整体耗时的路径。如果活动网没有任意一个分叉,所有节点连起来也为一条关键路径。找关键路径用于解决什么问题?项目推进中,如果要压缩工期,找到关键路径,并减小关键活动的耗时才能减少整体耗时,否则会做无用功。红色的边 = 关键活动。红色边 + 经过的节点 = 关键路径。存在关键路径的前提状态—— 图的顶点活动—— 图的边看本文需要具备的基础拓扑排序、逆拓扑排序参考王道教程,例子来源于王道。原创 2021-09-18 17:37:29 · 6159 阅读 · 3 评论 -
【算法】判断两棵二叉树是否相似
1. 前言看到本题后,考虑使用前中后哪种遍历确认递归函数是否携带返回值运算符&& 的逻辑短路的特性2. 题目已知两颗二叉树B1和B2,算法f52判断B1和B2是否相似,相似则返回1,否则返回0。如果B1和B2均为空树,则两棵树相似。如果B1和B2非空且B1的左右子树与B2的左右子树分别相似。则两棵树相似。3. 题解思路确定遍历对象两棵未知形状的树,且由题意,两棵空树一定相似。if (NULL == t1 && NULL == t2) { // 规范了原创 2021-09-14 10:57:24 · 3835 阅读 · 0 评论 -
【算法】对二叉树进行操作:如果结点没有左孩子但是有右孩子,就将其右孩子改变为左孩子
1.前言提醒自己,对二叉树的操作,要对递归函数了解透彻,并熟练二叉树的递归遍历。2. 解题2.1 确定遍历类型后序遍历一定可行作为深度优先遍历,找到左子树最深处的节点后返回进行“访问”,以下将这个过程描述为回溯 。在回溯的过程中,实现交换。自底向上所有的回溯完成,交换也完成。后序遍历确保根节点最后被"访问"。2.2 代码void f(BiTree T) { if (T == NULL) { return; } f(T->lchild); f(T->rchi原创 2021-09-14 10:05:19 · 1483 阅读 · 0 评论 -
【算法】中缀表达式转换成后缀表达式的算法理解
中缀表达式转换成后缀表达式的算法理解liuyubobobo 老师曾表达一个观点,学算法,并不一定要从算法发明人的视角去从0至1的实现。光能够体会算法的精妙之处本来就是值得兴奋的事,若能将算法思想用于自己的工作中则更是难得的美事。【2012统考真题】已知操作符包括“+”、“-”、“*”、“/”、“(”和“)”。将中缀表达式a+b-a*((c+d)/e-f)+g转换为等价的后缀表达式ab+acd+e/f-*-g+时,用栈来存放暂时还不能确定运算次序的操作符。若栈初始时为空,则转换过程中同时保存在栈中的操原创 2021-07-05 18:09:03 · 2754 阅读 · 1 评论 -
【算法】O(n2)时间复杂度和O(nlogn)排序算法的简要分析
排序算法的概述排序算法按时间复杂度分可以分为O(n2) 和 O(logn)O(n2) 排序算法流程分析1234.n个数已有序5.开始扫描第n+1个数n个无序序列外层遍历遍历至第n个数内层遍历外层遍历的时间复杂度是n,内层遍历的时间复杂度也是n,由于嵌套关系,总的时间复杂度就是O(n2) 。O(n2) 排序算法都使用上述的流程,典型的代表有选择排序 、插入排序选择排序123value和...原创 2020-03-15 00:54:14 · 3765 阅读 · 1 评论 -
【Java_基础深入】JDK借助RandomAccess接口 ,定制ArrayList与LinkedList的二分查找策略
java常用集合类接口实现情况public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializablepublic class LinkedList<E> exte...原创 2020-03-08 19:04:28 · 726 阅读 · 0 评论 -
【算法】回溯时集合操作 保持对象的独立性
题目/** * @Author james * @Description 给定一个没有重复数字的序列,返回其所有可能的全排列。 -- 使用数组记录状态 * * 示例: * * 输入: [1,2,3] * 输出: * [ * [1,2,3], * [1,3,2], * [2,1,3], * [2,3,1], * [3,1,2], * [3,2,1...原创 2019-08-27 11:44:16 · 139 阅读 · 0 评论 -
【算法】求100以内的所有素数,使用数组优化
普通解法 public static void getE(int size){ int count = 0; for (int i = 2; i < size; i++) { // 默认所有数都是素数 boolean flag = true; for (int j = 2; j <...原创 2019-10-20 19:46:54 · 4451 阅读 · 0 评论 -
【算法】从斐波那契问题看待数据结构和算法
题目回顾求斐波那契数列的第n个数1, 1, 2 , 3, 5,8,… /** * 递归算法 * @param n 第n个数 * @return 第n个数的值 */ private static long Fibonacci(int n) { if(n == 1 || n == 2) { ret...原创 2019-10-20 18:58:51 · 217 阅读 · 0 评论 -
【MySQL】伪rank函数的需求实现,group by 的使用习惯
题目来源:https://blog.csdn.net/fashion2014/article/details/78826299目标MySql 没有rank函数,可以使用子查询 + 自连接实现rank逻辑题目DDL-- 成绩表 持有学生表和课程表的主键CREATE TABLE `Score`( `s_id` VARCHAR(20), `c_id` VARCHAR(20), `s_s...原创 2019-09-28 16:26:52 · 570 阅读 · 0 评论 -
【算法】算法第四版学习笔记 -- 排序算法类模板
摘至算法第四版 P153package sort;public class Example { public static boolean less(Comparable v, Comparable w) { return v.compareTo(w) &amp;amp;lt; 0; } public static void exch(Comparable[] a, int i, int j)...原创 2018-10-10 19:53:34 · 518 阅读 · 0 评论 -
【算法】算法第四版学习笔记 -- 希尔排序
希尔排序是基于插入排序的算法排序算法类模板:https://blog.csdn.net/chenghan_yang/article/details/83002422希尔排序的步骤确定分组间隔,并确定递增序列对原数组进行等间隔分组,遵循一定的规则,类似于{n1,n2,n3,n4,n5,n6} 以3为间隔,可分为{n1,n4}、{n2,n5}、{n3,n6}对原序列进行等间隔分组,遵循...原创 2018-10-17 17:10:22 · 509 阅读 · 1 评论 -
【算法】算法第四版学习笔记 -- 冒泡排序法优化
package bubble_sort;import java.util.Arrays;import sort.Example;public class BubbleOptimization extends Example { public static void sort(Comparable[] a) { int N = a.length; int count = 0;...原创 2019-01-06 20:18:11 · 241 阅读 · 0 评论 -
【算法】算法第四版学习笔记 -- 冒泡排序与鸡尾酒排序
鸡尾酒排序是冒泡排序的变形,可以减少外层循环的次数。元素之间的对比次数与交换次数不会得到优化,同时要维护布尔值的判断,所以这两个排序效能都较差。排序类算法模板,类: Examplehttps://blog.csdn.net/chenghan_yang/article/details/83002422冒泡排序法(使用交换标识优化)package bubble_sort;impor...原创 2019-01-07 09:26:55 · 285 阅读 · 0 评论 -
【算法】已知必存在众数,求该众数 -- 分治法
分治法应用场景之一:大学选毕业生代表【分】提出【大范围问题 】 校长告诉大四级长:从所有大四学生中选出毕业生代表处理为【小范围问题】大四级长告诉每个系主任:从各自的系里面选一个系学生代表再处理为【最小范围问题】系主任告诉每个班主任:从各自的班里选一个班级学生代表【治】最先反馈【最小范围问题】每个班主任分别告诉系主任:这是我们班级学生代表。每个系主任从班级代表里面选...原创 2019-07-10 21:14:51 · 1406 阅读 · 3 评论 -
【算法】已知必存在众数,求该众数 -- Boyer-Moore 投票算法
LeetCode的思路演绎算法思路题意:必存在众数 -》 在一个数组中,有一个数拥有找过一半的占有率,这个数记为A若A和其他数组中的数进行选举,投票人只能是数组中的数。则A必赢(因为人数上已经过半)。解题的关键就是:找到票数最高的人。改动LeetCoded的演绎/** * @Author james * @Date 2019/7/10 * @Description...原创 2019-07-10 22:03:17 · 194 阅读 · 0 评论 -
【算法】链表反转 -- 迭代解法
链表反转 迭代原创 2019-07-06 11:35:18 · 253 阅读 · 0 评论 -
【算法】链表反转 -- 递归解法
链表反转 递归 迭代原创 2019-07-07 00:17:14 · 1132 阅读 · 0 评论 -
【算法】求最大子序和 -- 动态规划
题目/** - @Author james - @Date 2019/7/19 - @Description 求最大子序和 -- 动态规划 */public class Solution { public int maxSubArray(int[] nums) { if(nums.length == 0) { return 0; ...原创 2019-07-19 20:53:17 · 564 阅读 · 0 评论 -
【算法】求二叉树两节点的最近公共祖先 迭代解法 Stack + Map + Set
算法拆分遍历树广度优先遍历(层序遍历) – 辅助栈 Stack // 辅助栈 Stack<TreeNode> stack = new Stack<>(); // 遍历前压栈进根节点 stack.push(root); // 遍历树,广度优先遍历, 每次遍历前 pop 一个元素 while (!stack.isEmpt...原创 2019-09-02 22:08:23 · 281 阅读 · 0 评论 -
【算法】算法第四版学习笔记 -- 选择排序、冒泡排序、插入排序
书中讲了选择排序和插入排序,我认为冒泡排序也很必要掌握选择排序 -&amp;amp;amp;amp;amp;amp;amp;gt; 冒泡排序 -&amp;amp;amp;amp;amp;amp;amp;gt; 插入排序排序类算法的模板https://mp.csdn.net/mdeditor/83002422#选择排序核心:每一轮比较,把最小值(最大值)固定在一个下标指向的位置,只改变一个指针序列中的所有元素都会依次成为基准元素。原创 2018-10-10 22:59:18 · 287 阅读 · 1 评论