labuladong算法笔记总结 动态规划解题套路框架 学习计划: 最长回文子序列 〇、必读文章 1、数据结构和算法学习指南(学习算法和刷题的框架思维) 了解数据结构的操作和遍历(迭代or递归) 从树刷起,结合框架思维,有利于理解(回溯、动态规划、分治等) 2、动态规划详解(动态规划解题套路框架) 过程:递归的...
寻找右侧边界:left = mid + 1;「搜索区间」全都统一成两端都闭 6、我写了套框架,把滑动窗口算法变成了默写题 /* 滑动窗口算法框架 */ void slidingWindow(string s, string t) { unordered_map<char, int> need, window; for (char c : t) need[c]++; int left = 0, right = 0; int valid =...
2、不断增大right指针扩大窗口[left, right),直到窗口中字符串符合要求 3、停止增加right,不断减少left缩小窗口[left,right)直到窗口中字符串不符合要求。每次增加left,更新结果 4、重复2和3,直到right到达字符串s的尽头 第二步在寻找可行解,第三步在优化可行解,最终找到最优解。 模板 func slidingWindow(s, t...
使用虚拟头结点 遍历两个链表,将数值小的节点加入虚拟头节点中。直到某个链表为空。将另一个链表加入。 返回虚拟头节点的下一个节点。 当你需要创造一条新链表的时候,可以使用虚拟头结点简化边界情况的处理 func mergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode { res := &ListNode{ Val: -1, N...
labuladong的算法小抄学习笔记 本文主要目的是精简原文,吸其精华,简单整理方便自己。 有很多结论,是原文的话,请带着自己的思想观看这篇笔记。 labuladong的原文地址 一、基础: 数据结构的存储方式只有两种:数组(顺序存储)和链表(链式存储)。 用数组实现,就要处理扩容缩容的问题;...
10.垃圾收集算法A.标记-清除算法B.复制算法C.标记-整理算法D.分代收集算法11.垃圾收集器A.Serial 收集器B.ParNew 收集器C.Parallel Scavenge 收集器D.Serial Old 收集器E.Parallel Old 收集器F.CMS 收集器G.G1 收集器H.ZGC 收集器#垃圾回收 #GC算法 #JVM调优 #JAVA #科技启示录 9 00:01 一口气看完,...
Labuladong的算法笔记,开源网站上非常火的学习笔记#算法 #编程 #计算机 #火星推荐 - 火星课堂于20230916发布在抖音,已经收获了398.1万个喜欢,来抖音,记录美好生活!
三、左右指针常用算法 二分查找 力扣167题 两数之和 左右指针一个指向头,一个指向尾。如果左不等于右执行判断左右所处数值相加是否为目标值。如果是,直接返回左右索引+1。 如果小于目标值,左指针左移。如果大于目标值,右指针左移。 只要数组有序,就应该想到双指针技巧 ...
明确base case -> 明确「状态」-> 明确「选择」 -> 定义 dp 数组/函数的含义。 递归算法的时间复杂度怎么计算?就是用子问题个数乘以解决一个子问题需要的时间。 1、明确基础条件 2、明确状态、原问题和子问题会变化的变量 3、明确选择、会导致状态发生变化的行为。