10 2024 档案
摘要:学习资料:https://programmercarl.com/0056.合并区间.html#算法公开课 贪心PART5 over 学习记录: 56.合并区间(也是找重叠区间,但是是跟result[-1]比,只用比右边界;更新result[-1][1]为更大值) 点击查看代码 class Solut
阅读全文
摘要:学习资料:https://programmercarl.com/0452.用最少数量的箭引爆气球.html 重叠区域问题 最远位置问题 452.用最少数量的箭引爆气球(重叠区域;按左边界排序;i区间的左边界与i-1区间的右边界比较来确定是否重叠;更新i的右边界,取i与i-1区域右边界的最小值) 点击
阅读全文
摘要:学习资料:https://programmercarl.com/0134.加油站.html#算法公开课 贪心:当有两个维度要考虑时,要分开考虑 134.加油站(每个位置都求净加油量;当累计的净加油量变成负数时,就舍弃前面遍历的这部分的累计净加油量,并继续向后遍历;取负数后面的那个位置作为预设的起点;
阅读全文
摘要:学习资料:https://programmercarl.com/0122.买卖股票的最佳时机II.html#算法公开课 贪心PART2 学习记录: 122.买卖股票的最佳时间2 (求最大利润,贪心:把所有正数相加;后一天与当天的股票价格差值,若为正就加入利润,若为负,则不加) 点击查看代码 clas
阅读全文
摘要:学习资料:https://programmercarl.com/贪心算法理论基础.html#算法公开课 贪心算法Part1 求局部最优解,最终达到全局最优 455.分发饼干(大胃口吃大饼干) 点击查看代码 class Solution(object): def findContentChildren
阅读全文
摘要:学习资料:https://programmercarl.com/0491.递增子序列.html#算法公开课 排列与组合的区别,不用startIndex,而每个树层都从0开始,但是要跳过已经用过的数(用used判断) 学习记录: 491.递增子序列(添加一个数组used(hash表),来保持数组每个位
阅读全文
摘要:学习资料:https://programmercarl.com/0093.复原IP地址.html#算法公开课 分割问题可用回溯法 子集和组合题都可以用回溯法,不同点在于:组合题的目标值都在叶子节点,而子集问题要收集所有的节点 👍给定一个数字字符串,如何返回数值: num = 0 for i in
阅读全文
摘要:学习资料:https://programmercarl.com/回溯算法理论基础.html 回溯法backtracking:for循环控制递归数量,暴力搜索:组合、切割、子集、排列、棋盘 今天学了组合和切割 可以画个N叉树的图来帮助理解回溯过程 组合又包括 1.单个数组(要加startIndex参数
阅读全文
摘要:学习资料:https://programmercarl.com/0669.修剪二叉搜索树.html#算法公开课 学习记录: 669.修剪二叉搜索树(直接在原函数上操作,要根据情况用root的左右子树递归,因为子树中有满足条件的;前序:根左右) 点击查看代码 # Definition for a bi
阅读全文
摘要:学习资料:https://programmercarl.com/0235.二叉搜索树的最近公共祖先.html**** 学习记录: 235.二叉搜索树的最近公共祖先(加一个函数traversal) 点击查看代码 # Definition for a binary tree node. # class
阅读全文
摘要:学习资料:https://programmercarl.com/0530.二叉搜索树的最小绝对差.html 530.二叉搜索树的最小绝对差(双指针法,pre&cur,设置最小差值初始为无穷大,当差值<最小差值就更新最小差值) 点击查看代码 # Definition for a binary tree
阅读全文
摘要:学习资料:https://programmercarl.com/0654.最大二叉树.html#算法公开课 用前序遍历构造二叉树 二叉搜索树的特点,其左节点的值<每个节点的值<其右节点的值,且根节点的值大于它的左子树的所有节点的值,小于它右子树的所有节点的值,其他同理。 二叉搜索树的搜索和验证时不关
阅读全文
摘要:学习资料:https://programmercarl.com/0513.找树左下角的值.html#算法公开课 递归、回溯 返回值:True/False, root 构建二叉树 TrueNode(root_value) 513.找树左下角的值(实例变量self.result, self.maxdep
阅读全文
摘要:学习资料:https://programmercarl.com/0110.平衡二叉树.html#算法公开课 平衡二叉树:任意一个节点的左右子树高度差不超过1 左叶子:是叶子节点,且是其父节点的左节点 完全二叉树:上层均满,底层的节点从左到右连续 满二叉树:每层都是满的,节点总数为 (2^k + 1)
阅读全文
摘要:学习资料:https://programmercarl.com/0226.翻转二叉树.html#算法公开课 今天都用递归法,三思(返回值;终止条件;处理逻辑) 前/中/后序遍历方法要仔细辨别 选取的226用前序遍历,后三道用后续遍历 二叉树深度:根节点为1,其余节点与根节点相比,越下越大 二叉树高度
阅读全文
摘要:学习资料:https://programmercarl.com/二叉树理论基础.html 二叉树:满二叉树、完全二叉树、二叉搜索数、平衡二叉搜索树; 链式存储、顺序存储; 前序/中序/后序遍历 递归法、迭代法,层序 深度优先搜索dfs,广度优先搜索 学习记录: 144.二叉树的前序遍历(也要注重二叉
阅读全文
摘要:学习资料:https://programmercarl.com/0150.逆波兰表达式求值.html#算法公开课 栈、队列、堆 学习记录: 150.逆波兰表达式求值(中序表达式转换为后序表达式,用栈实现;遇到符号就从栈中取前两个元素进行运算,再放回去) 点击查看代码 from operator im
阅读全文
摘要:学习资料:https://programmercarl.com/栈与队列理论基础.html 栈与队列 学习记录: 232.用栈实现队列(两个栈(stack_in, stack_out)实现一个队列的行为) 点击查看代码 class MyQueue(object): def __init__(self
阅读全文
摘要:学习资料:https://programmercarl.com/0151.翻转字符串里的单词.html 学习记录: 151.翻转字符串里的单词(感觉C语言能考虑巧妙解法,而python直接搞就对了) c语言:把字符串整体反转,再用双指针法(slow, fast)依次翻转每一个单词,关键在于如何移除多
阅读全文
摘要:学习资料:https://programmercarl.com/0344.反转字符串.html#算法公开课 在python中字符串不可变,所以要增加空间 lst=list(str) 344.反转字符串(reverse库函数的基本代码) 点击查看代码 class Solution(object): d
阅读全文
摘要:学习资料:https://programmercarl.com/0015.三数之和.html#其他语言版本 学习记录: 454.四数相加(hash_dict,前两个数一组遍历a+b,后两个数一组遍历找0-(a+b)) 点击查看代码 class Solution: def fourSumCount(s
阅读全文
摘要:学习资料:https://programmercarl.com/0024.两两交换链表中的节点.html 学习记录: 24.两两交换链表中的节点(添加虚拟头节点;交换1、2节点和3、4节点时,要用1前面的cur,先保存1为temp且3保存为temp1,cur指向2,再把2指向temp,因为cur指向
阅读全文
摘要:学习资料:https://programmercarl.com/链表理论基础.html#链表的类型 可设置虚拟头结点 dummy_head 链表最后指向Null 一个节点包含值和索引 学习记录: 203.移除链表元素(基本ListNode(),cur.next, cur.next.val) 点击查看
阅读全文
摘要:学习资料:https://programmercarl.com/数组总结篇.html#数组的经典题目 移动窗格,首尾指针根据条件变化 模拟行为,循环不变量(左闭右闭或左闭右开)整个过程保持一致 学习记录: 209.长度最小的子数组(用while使得尾指针遍历全部;用while实现,当[首:尾]之和>
阅读全文
摘要:学习资料:https://programmercarl.com/数组理论基础.html 理解: 双指针可以同时获取一个数组的两个位置的值 二分查找:根据区间范围(左闭右闭、左闭右开)来判断左右指针比较方式 刷题记录: 704.二分查找(左闭右闭则<=,左右指针,middle=left+(right-
阅读全文
摘要: 学习链接:https://programmercarl.com/哈希表理论基础.html 学习笔记: 遇到“要判断一个值是否在集合中出现过”的问题时,可以考虑hash表。 hash表的形式包括数组、set、dict。当数的位数比较统一、或比较小,可用数组,快;当数的位数可变,可用set;当要同时
阅读全文