
Leetcode
分享leetcode思路和算法。
程序员毛师傅
浙江大学硕士,从事自动驾驶感知
展开
-
【原创】状态压缩动态规划入门(状压dp)
状态压缩动态规划简称状压dp,是一种通过二进制+dp的方法来解决问题的算法,一般来说这类算法适用于有n个任务,将n个任务全部完成需要的最小时间等(也可以用于棋盘问题等),此时我们需要构造2n2^n2n种状态来,考虑各个状态再得出答案。状态压缩动态规划其实算是一种相对暴力的算法,其时间代价往往是指数级别的(速度还是比普通暴力法快很多),掌握状态压缩动态规划首先需要掌握位运算,这是状态压缩动态规划的基础。位运算:1.& :参加运算的两个数据,按二进制位进行“与”运算。运算规则: 0&0=原创 2020-07-29 14:44:01 · 1325 阅读 · 0 评论 -
每日leetcode(三) 并查集
Leetcode原题:给定一个由表示变量之间关系的字符串方程组成的数组,每个字符串方程 equations[i] 的长度为 4,并采用两种不同的形式之一:“a==b” 或 “a!=b”。在这里,a 和 b 是小写字母(不一定不同),表示单字母变量名。只有当可以将整数分配给变量名,以便满足所有给定的方程时才返回 true,否则返回 false。 示例 1:输入:["a==b","b!=a"]输出:false解释:如果我们指定,a = 1 且 b = 1,那么可以满足第一个方程,但无法满足第二个原创 2020-06-08 21:39:44 · 214 阅读 · 0 评论 -
每日leetcode(二) 二分查找中位数
Leetcode 原题:给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是 (2 + 3)/2 = 2.5这题我们可以看到,时间复杂度要求为 O(lo原创 2020-06-03 22:46:12 · 1115 阅读 · 0 评论 -
每日leetcode(一) 俄罗斯农民乘法
leetcode原题:求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。(1 <= n <= 10000)这题的第一种思路是用回溯,这里不多讨论。第二种方法可以用俄罗斯农民乘法。我们知道1+2+3....+n=n∗(n+1)/21+2+3....+n=n*(n+1)/21+2+3....+n=n∗(n+1)/2,但这里我们不能使用乘除法,所以可以用位运算>>1来代替除以2,用俄罗斯农民乘原创 2020-06-02 18:29:06 · 449 阅读 · 0 评论