leetcode系列
对做过的leetcode算法题记录并讲解算法原理
冰临天下
一个菜鸟工程师的心理路程
展开
-
【leetcode系列】【算法-DP】【中等】三角形最小路径和
题目:题目链接:https://leetcode-cn.com/problems/triangle/解题思路:动态规划状态转移公式为:其中i为行数,j为列数以为是三角形,不是矩形,所以如果是从上向下的遍历,需要考虑两个特殊情况(如果是从下向上,则不需要考虑):遍历到当前行的第一个元素时,上一行只能取下标相同的数字 遍历到当前行的最后一个元素时,上一行只能取下标 - 1的数字在设置dp数组时,只需要设置一个三角形行数(= 最后一行元素个数)的数组,从后..原创 2020-06-10 09:16:18 · 256 阅读 · 0 评论 -
【leetcode系列】【算法】第 26 场双周赛
题目一:题目链接:https://leetcode-cn.com/problems/consecutive-characters/解题思路:从第二个字符开始遍历,当前长度和最大长度初始化为1如果遍历到的字符,和上个字符相同,则当前长度 += 1,最大长度 = max(最大长度,当前长度)如果和上个字符不相同,则重置当前长度 = 1,继续遍历代码实现:class Solution: def maxPower(self, s: str) -> int...原创 2020-05-18 17:37:18 · 181 阅读 · 0 评论 -
【leetcode系列】【算法】【中等】乘积最大子数组
题目:题目链接:https://leetcode-cn.com/problems/maximum-product-subarray/解题思路:动态规划,状态转移公式为:需要注意的一点是,因为有负数的存在,所以在每一位需要保存最大和最小的两个值,用于下一位的计算代码实现:class Solution: def maxProduct(self, nums: List[int]) -> int: min_ans = max_ans =..原创 2020-05-18 08:39:56 · 203 阅读 · 0 评论 -
【leetcode系列】【算法】【中等】和为K的子数组
题目:题目链接:https://leetcode-cn.com/problems/subarray-sum-equals-k/解题思路:有点类似于“两数之和”的思路遍历数组的时候,同时累加从第一个元素到当前元素的和sum,放入到hash表中。同时判断sum - k是否在hash表中存在如果存在,说明之前至少存在一个下标为idx的元素,idx之前的子数组之和为sum - k,idx之后的子数组适合为k,这个时候更新结果个数 += 子数组之和为sum - k的个数代码实...原创 2020-05-15 08:56:17 · 265 阅读 · 0 评论 -
【leetcode系列】【算法】2020春季全国编程大赛-团队赛(更新第五题解题思路和代码)
写在前面:本次题感觉总体都有ACM的味道了,个人感觉难度极高...强烈建议自己先考虑一下,然后再看题解题目一:题目链接:https://leetcode-cn.com/contest/season/2020-spring/problems/qi-wang-ge-shu-tong-ji/解题思路:通过分析题目发现,不同分数的简历之间是不会互相影响的,所以原问...原创 2020-05-04 23:27:07 · 2386 阅读 · 0 评论 -
【leetcode系列】【算法】第187 场周赛
题目一:题目链接:https://leetcode-cn.com/problems/destination-city/解题思路:把所有起终点信息,放入到hash表中,key = 起点,val = 终点然后遍历hash表,如果某个终点在hash表中没有对应的key,说明是最终终点代码实现:class Solution: def destCity(s...原创 2020-05-03 23:42:55 · 176 阅读 · 0 评论 -
【leetcode系列】【算法】第 25 场双周赛
题目一:解题思路:判断每一位加上额外糖果数,是否大于等于原始数组中的最大值代码实现:class Solution: def kidsWithCandies(self, candies: List[int], extraCandies: int) -> List[bool]: return [a + extraCandies >=...原创 2020-05-03 00:19:49 · 407 阅读 · 0 评论 -
【leetcode系列】【算法】【简单】词典中最长的单词
题目:题目链接:https://leetcode-cn.com/problems/longest-word-in-dictionary/解题思路:方法一:trie + dfstrie : 前缀树dfs : 深度优先搜索将所有的单词插入到trie树中,然后进行深度优先搜索,查找最长的的单词时间复杂度:,其中,w表示的是每个单词的长度方法二:hash ...原创 2020-05-01 23:42:56 · 253 阅读 · 0 评论 -
【leetcode系列】【面试题】【中等】数组中数字出现的次数(位运算、二分)
题目:题目链接:https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-lcof/解题思路:方法一:异或,时间O(N),空间O(1)如果只有一个数字不重复,那只要从第一个数字异或到最后一个数字的结果,就是不重复的数字但是如果有两个数字不重复,那异或的结果,就是两个不重复数字的异或...原创 2020-04-28 09:27:45 · 237 阅读 · 1 评论 -
【leetcode系列】【算法】第 186 场周赛
题目一:题目链接:https://leetcode-cn.com/problems/maximum-score-after-splitting-a-string/解题思路:右边的为1的个数,先遍历一次,计算有多少个1添加三个变量,left为左半部分0的个数,初始化为0;right为右半部分1的个数,初始化为上一步的统计值;max_sum为当前left + right的最...原创 2020-04-26 14:20:30 · 207 阅读 · 0 评论 -
【leetcode系列】【算法】【中等】全排列
题目:题目链接:https://leetcode-cn.com/problems/permutations/解题思路:回溯 + 剪枝,大概框架为:def function(): if 满足插入结果条件: 插入结果集 return elif 不满足继续遍历条件(比如次数等要求达到上限): return ...原创 2020-04-25 08:16:08 · 173 阅读 · 1 评论 -
【leetcode系列】【算法】【中等】从中序与后序遍历序列构造二叉树
题目:题目链接:https://leetcode-cn.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal/解题思路:类似从前序与中序遍历序列构造二叉树,需要注意的有几点:根据后序遍历,当前最后一个元素为根节点 因为后续遍历是左子树 -> 右子树 -> 根节点的顺序...原创 2020-04-24 22:24:54 · 146 阅读 · 0 评论 -
【leetcode系列】【算法】【简单】修剪二叉搜索树(迭代)
题目:题目链接:https://leetcode-cn.com/problems/trim-a-binary-search-tree/解题思路:比较就好,用递归代码应该是最少的但是应某些人的要求,尝试用迭代的方法实现了一下可能不是最好的迭代的方法,欢迎讨论代码实现:# Definition for a binary tree node.# clas...原创 2020-04-24 09:15:57 · 133 阅读 · 0 评论 -
【leetcode系列】【面试题】【困难】数组中的逆序对
题目:题目链接:https://leetcode-cn.com/problems/shu-zu-zhong-de-ni-xu-dui-lcof/解题思路:自己的方法:对数组进行遍历,添加一个数组保存已经遍历过的数字。每次遍历的时候,使用二分查找,找到当前数字应该在保存记录数组中插入的最右边的位置(如果有重复数字,插入到重复数字的最右边)此时就可以根据当前的idx值,...原创 2020-04-24 09:00:27 · 211 阅读 · 0 评论 -
【leetcode系列】【面试题】【中等】硬币
题目:题目链接:https://leetcode-cn.com/problems/coin-lcci/解题思路:方法一:总钱数使用方程式表达为:,所以其实是求这个方程a、b、c、d整数解的个数所以最简单的数学方法,就是3层循环,第一层固定a,第二层固定b,第三层固定c简单优化的话,在固定了第一层和第二层之后,第三层其实也就能固定下来了时间复杂度为:...原创 2020-04-23 22:41:29 · 241 阅读 · 0 评论 -
【leetcode系列】【算法】【简单】图片平滑器
题目:题目链接:https://leetcode-cn.com/problems/image-smoother/解题思路:主要就是边界点的判断代码实现:class Solution: def imageSmoother(self, M: List[List[int]]) -> List[List[int]]: def calc_...原创 2020-04-22 12:35:29 · 118 阅读 · 0 评论 -
【leetcode系列】【算法】【简单】两数之和 IV - 输入 BST(Binary Search Tree)
题目:题目链接:https://leetcode-cn.com/problems/two-sum-iv-input-is-a-bst/解题思路:类似两数之和的解题思路添加一个hash表保存已经遍历过的数字,只是需要将遍历方式修改为树的遍历方式代码实现:# Definition for a binary tree node.# class TreeNode...原创 2020-04-22 10:30:11 · 112 阅读 · 0 评论 -
【leetcode系列】【算法】【简单】错误的集合
题目:题目链接:https://leetcode-cn.com/problems/set-mismatch/解题思路:基础方式为暴力搜索两个for循环,第一层循环是1到n,第二层循环为nums,查看第一层循环的数字,是否在nums数组中,时间复杂度为其实我们可以创建一个n + 1长度的数组,初始化为0,然后对nums进行遍历遍历时,使用当前遍历到的数字作为下标,更新...原创 2020-04-22 09:05:46 · 158 阅读 · 0 评论 -
【leetcode系列】【算法】【中等】二叉树的右视图
题目:题目链接:https://leetcode-cn.com/problems/binary-tree-right-side-view/解题思路:树的层序遍历,先放左节点,再放右节点每次将一层都放完的时候,将最后一个放入的元素加入到结果集中,其余直接清空然后继续遍历下一层代码实现:# Definition for a binary tree nod...原创 2020-04-22 08:47:14 · 127 阅读 · 2 评论 -
【leetcode系列】【算法】第 185 场周赛
题目一:重新格式化字符串题目链接:https://leetcode-cn.com/problems/reformat-the-string/解题思路:先遍历字符串,把字母和数字分开保存在两个容器中从数目比较多的开始交替遍历拼接字符串如果最后少的已经用完了,多的还有剩余,则表示无法重新格式化,返回空字符串代码实现:class Solution: ...原创 2020-04-19 18:25:44 · 153 阅读 · 0 评论 -
【leetcode系列】【算法】第 24 场双周赛
题目一:解题思路:对数组连续求和,并找到一个小于0的最小值取绝对值 + 1,就是要求的值代码实现:class Solution: def minStartValue(self, nums: List[int]) -> int: start_val = 1 curr_sum = 0 min_val =...原创 2020-04-19 00:14:05 · 143 阅读 · 0 评论 -
【leetcode系列】【算法】2020春季全国编程大赛-个人赛
题目一:解题思路:奇数需要拿/ 2 + 1次,偶数需要拿/ 2次代码实现:class Solution: def minCount(self, coins: List[int]) -> int: res = 0 for a in coins: res += a // 2 ...原创 2020-04-18 21:26:27 · 1011 阅读 · 0 评论 -
【leetcode系列】【算法】【简单】合并二叉树
题目:题目链接:https://leetcode-cn.com/problems/merge-two-binary-trees/解题思路:DFS,递归遍历同结构顺序下的子树代码实现:# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# ...原创 2020-04-18 20:20:33 · 141 阅读 · 0 评论 -
【leetcode系列】【SQL】【简单】有趣的电影
题目:题目链接:https://leetcode-cn.com/problems/not-boring-movies/解题思路:mysql库函数mod或者div的应用代码实现:# Write your MySQL query statement belowselect id, movie, description, rating from cinemaw...原创 2020-04-18 20:18:26 · 157 阅读 · 0 评论 -
【leetcode系列】【SQL】【简单】交换工资
题目:题目链接:https://leetcode-cn.com/problems/swap-salary/解题思路:mysql库函数if的应用代码实现:# Write your MySQL query statement belowupdate salary set sex = if(sex = 'f', 'm', 'f');...原创 2020-04-18 20:16:29 · 116 阅读 · 0 评论 -
【leetcode系列】【算法】【简单】另一个树的子树
题目:题目链接:https://leetcode-cn.com/problems/subtree-of-another-tree/解题思路:比对s和t当前节点的值是否相同如果相同,递归比对左右子树如果不相同,将s的左右子树放入栈,然后继续对栈内的节点与t的值进行比对直到左右子树都相等,或者遍历完s树的所有节点代码实现:# Definition f...原创 2020-04-17 23:34:57 · 148 阅读 · 0 评论 -
【leetcode系列】【算法】【简单】N叉树的最大深度
题目:题目链接:https://leetcode-cn.com/problems/maximum-depth-of-n-ary-tree/解题思路:dfs,遍历每个节点的N个字数,并查找最大高度代码实现:"""# Definition for a Node.class Node: def __init__(self, val=None, child...原创 2020-04-17 23:16:16 · 121 阅读 · 0 评论 -
【leetcode系列】【算法】【简单】二叉树的直径
题目:题目链接:https://leetcode-cn.com/problems/diameter-of-binary-tree/解题思路:DFS搜索,对于某个根节点,查找左右子树的最高高度左子树最大高度 + 右子树最大高度 + 1(自己) = 当前节点的最大半径代码实现:# Definition for a binary tree node.# cl...原创 2020-04-17 09:29:13 · 130 阅读 · 0 评论 -
【leetcode系列】【算法】【简单】把二叉搜索树转换为累加树
题目:题目链接:https://leetcode-cn.com/problems/convert-bst-to-greater-tree/解题思路:类似中序遍历的栈的使用方式,参考:二叉树的中序遍历,只不过把遍历方式修改为根 -> 右 -> 左设置一个变量add_num来记录比当前数字大的所有数字的和代码实现:# Definition for...原创 2020-04-16 22:30:08 · 142 阅读 · 0 评论 -
【leetcode系列】【算法】【面试题】二维数组中的查找(利用栈的分治 + 二分查找)
题目:题目链接:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/解题思路:方法一:线性查找从矩阵的右上角开始查找,流程如下:如果目标值大于当前值,则目标值大于当前行前面的所有值,所以向下查找 如果目标值小于当前值,则目标值小于当前列下面的所有值,所以向左查找这样子能...原创 2020-04-15 01:34:44 · 299 阅读 · 0 评论 -
【leetcode系列】【算法】【中等】两数相加 II
题目:题目链接:https://leetcode-cn.com/problems/add-two-numbers-ii/解题思路:利用栈后进先出的特性,把两个链表放入栈中,然后对栈进行遍历,把数字相加,生成新的链表返回代码实现:# Definition for singly-linked list.# class ListNode:# def _...原创 2020-04-14 10:55:03 · 114 阅读 · 0 评论 -
【leetcode系列】【算法】【中等】设计推特
题目:题目链接:https://leetcode-cn.com/problems/design-twitter/解题思路:hash + 双向链表hash表key是用户,value是该用户关注的用户列表双向链表保存的是用户发送的推特,前面的是最新发送的,后面的是较旧的为了实现方便,我把所有人发送的推特放到一个双向链表里了其实应该每个用户创建一个双向链表,然后获...原创 2020-04-13 16:14:19 · 120 阅读 · 0 评论 -
【leetcode系列】【算法】第184场周赛
题目一:数组中的字符串匹配题目链接:https://leetcode-cn.com/problems/string-matching-in-an-array/解题思路:按照字符串长度排序,然后从前向后遍历,前面的字符串是否是后面字符串的子串因为长字符串不可能是短字符串的子串,所以每次第二层遍历的开始位置,从第一层字符串的下一个开始代码实现:class S...原创 2020-04-12 13:09:30 · 256 阅读 · 0 评论 -
【leetcode系列】【算法】【简单】最小移动次数使数组元素相等(暴力法、排序、动态规划DP、数学法四方法求解)
题目:题目链接:https://leetcode-cn.com/problems/minimum-moves-to-equal-array-elements/解题思路:方法一:暴力法(时间O(),空间O(1))每次都计算所有数字移动后是否全部相等,移动次数为数组中的最大元素max减去最小元素min,是本次的移动步数和对非最大值的增加值重复此步骤,直到所有元素值相同,...原创 2020-04-12 00:03:00 · 3595 阅读 · 0 评论 -
【leetcode系列】【算法】【简单】排列硬币(数学推导)
题目:题目链接:https://leetcode-cn.com/problems/arranging-coins/解题思路:因为是等差公式,我们都是知道等差求和公式为:转换到这道题中的变量表现形式为:由此公式,推导k的表达式过程如下:根据上面的式子获得的值,向下取整,就是我们需要的值代码实现:class Solution: def...原创 2020-04-11 21:43:10 · 207 阅读 · 0 评论 -
【leetcode系列】【算法】【简单】二进制手表(回溯 + 剪枝)
题目:题目链接:https://leetcode-cn.com/problems/binary-watch/解题思路:"所有可能",第一反应就是回溯 + 剪枝的方式但是同时回溯小时和分钟的逻辑似乎比较复杂所以采用了分别递归回溯小时和分钟的方式,然后再两两配对组合最终的时间同时也可以减少递归的层数,减少内存消耗代码实现:class Solution:...原创 2020-04-11 21:28:46 · 301 阅读 · 0 评论 -
【leetcode系列】【算法】【简单】有效的完全平方数(牛顿迭代)
题目:题目链接:https://leetcode-cn.com/problems/valid-perfect-square/解题思路:方法一:二分法从num的一半开始查找,然后每次折半找中间的数字方法二:牛顿迭代只要是连续的函数,求其中一个某一个符合要求的点的时候,大多数情况下,都可以使用牛顿迭代对于这道题,函数表达式可以理解为:其中,x是我...原创 2020-04-11 00:19:05 · 308 阅读 · 0 评论 -
【leetcode系列】【算法】【简单】打家劫舍(基础DP)
题目:题目链接:https://leetcode-cn.com/problems/house-robber/解题思路:动态规划如果只有最后一家房屋,那么偷取的最高金额只有一种如果只有最后两家房屋,偷取最高金额的方式也只有一种,就是偷取钱多的一家从倒数第三家开始,偷取的方式变为了:偷取当前家和最后一家,或者只偷取倒数第二家两种所以动态规划的状态转移公式为:...原创 2020-04-10 00:26:09 · 216 阅读 · 0 评论 -
【leetcode系列】【SQL】【简单】上升的温度(日期计算)
题目:题目链接:https://leetcode-cn.com/problems/rising-temperature/解题思路:datediff库函数的使用SQL:select a.id from Weather a, Weather bwhere a.Temperature > b.Temperature and datediff(a.recor...原创 2020-04-10 00:23:03 · 169 阅读 · 0 评论 -
【leetcode系列】【SQL】【简单】删除重复的电子邮箱
题目:题目链接:https://leetcode-cn.com/problems/delete-duplicate-emails/解题思路:delete的使用,使用表自己和自己关联SQL:DELETE p1 FROM Person p1, Person p2 WHERE p1.Email = p2.Email AND p1.Id > p2.Id;...原创 2020-04-10 00:21:49 · 196 阅读 · 0 评论