每日一道算法题
每天打卡LeetCode,写一个题解博客
AlanWang0o0
莫问前路,但行远方
展开
-
每日一道算法题LeetCode面试题17.13:Re-Space LCCI(恢复空格)
恢复空格题目分析题解动态规划题目哦,不!你不小心把一个长篇文章中的空格、标点都删掉了,并且大写也弄成了小写。像句子"I reset the computer. It still didn’t boot!“已经变成了"iresetthecomputeritstilldidntboot”。在处理标点符号和大小写之前,你得先把它断成词语。当然了,你有一本厚厚的词典dictionary,不过,有些词没在词典里。假设文章用sentence表示,设计一个算法,把文章断开,要求未识别的字符最少,返回未识别的字符数。原创 2020-07-09 21:55:33 · 320 阅读 · 0 评论 -
每日一道算法题LeetCode面试题16.11:Diving Board LCCI(跳水板)
跳水板题目分析题解遍历k种情况题目你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。你必须正好使用k块木板。编写一个方法,生成跳水板所有可能的长度。返回的长度需要从小到大排列。题目链接:link.分析一道数学问题,结果是从 k * shorter 到 k* longer,间隔为 longer-shorter , 可以直接生成这个数组,用python就是一句代码:range(shorter*k, longer*k + 1,原创 2020-07-08 23:12:09 · 265 阅读 · 0 评论 -
每日一道算法题LeetCode112:Path Sum(路径总和 )
路径总和题目分析题解递归题目给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。分析题目要求路径必须由根节点到叶节点,就让题目简单了很多,递归一直查到叶节点即可。递归出口有两个,到达叶节点,并且路径和为sum,返回true;到达null节点,返回false题解递归 public boolean hasPathSum(TreeNode root, int sum) { if(ro原创 2020-07-07 17:13:05 · 218 阅读 · 0 评论 -
每日一道算法题:LeetCode 63:Unique Paths II(不同路径 II )
不同路径 II题目分析题解动态规划题目一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?题目链接:link.分析这道题作为不同路径系列的第二道,难度始终,当对于不同路径I ,新增了障碍物,解题思路改变不大。使用动态规划,有下列几种情况:当前位置为障碍物,则当前位置的路径数 = 0.当原创 2020-07-06 22:00:42 · 366 阅读 · 0 评论 -
每日一道算法题LeetCode44:Wildcard Matching(通配符匹配)
这里写目录标题题目分析题解动态规划题目给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。'?' 可以匹配任何单个字符。'*' 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。题目链接:link.分析不用多说,可以用动态规划。关键是递推式。一共有三种情况:1.* 与 字母:可以选择匹配当前字母或者不原创 2020-07-05 23:12:18 · 235 阅读 · 0 评论 -
每日一道算法题LeetCode32:Longest Valid Parentheses(最长有效括号)
最长有效括号题目分析题解栈总结题目给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。分析挺难的一道题,我想到了动态规划,想到了栈,但是一个都没有做出来。。有太多的点需要注意了,栈还是比较好理解的。题解栈初始化一个栈,遇到做括号就将下标入栈,遇到右括号就弹栈。如果弹栈之后栈为空,就将当前下表入栈。如果弹栈之后下表不为空,更新结果。注意要在最开始入栈一个 -1,比如“ () ”,没有入栈一个-1的话,结果就是0。 public static int原创 2020-07-04 23:40:03 · 173 阅读 · 0 评论 -
每日一道算法题LeetCode108:Convert Sorted Array to Binary Search Tree(将有序数组转换为二叉搜索树)
将有序数组转换为二叉搜索树题目分析题解总结题目将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。分析本题提供一个有序数组,要求将其转换为一个高度平衡二叉搜索树(左右子树高度差不超过一)。由于数组已经排序好,每个数左边的数都比本数小,右边的数都比本数大,所以选择中间的数为根节点,然后左右递归即可,这样一方面满足二叉树左节点小,右边节点大,另一方面,最后的左右子树高度差也不会超过一。题解原创 2020-07-03 19:49:52 · 142 阅读 · 0 评论 -
每日一道算法题LeetCode718:Maximum Length of Repeated Subarray(最长重复子数组)
最长重复子数组题目分析题解动态规划总结题目给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。分析这道题属于一看就知道可以用动态规划做的那种,关键就在于怎么找出动态规划的递推公式。由于是找到两个数组的公共部分,自然而然的,我们用一个二维表的表头来存储,想递推公式时可以画一个图,更容易想,写代码时下标也更好写:题解动态规划 public static int findLength(int[] A, int[] B) { int i,j;原创 2020-07-01 22:14:56 · 169 阅读 · 0 评论 -
每日一道算法题LeetCode剑指 Offer 09. 用两个栈实现队列
用两个栈实现队列题目分析题解总结题目用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )题目链接:link.分析我看到很多人在题目评论说看不懂题目示例,可能是只看题目,没有看代码吧。这道题要我们实现一个类,这个类有三个方法,一个构造方法,一个appendTail,一个deleteHead。题目示例就是说明测试时的调用顺序,实例一原创 2020-06-30 16:43:19 · 146 阅读 · 0 评论 -
每日一道算法题LeetCode125:Kth Largest Element in an Array(数组中的第K个最大元素)
数组中的第K个最大元素题目分析题解快排最小堆总结题目在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。分析这个题的思路很简单,将数组排序,然后返回倒数 K 位置的元素即可,所以排序算法的选择就很关键了。题解快排先使用快排,将数组排序,然后直接返回倒数 K 位置的元素: public static int findKthLargest(int[] nums, int k) { quickSort(nu原创 2020-06-29 17:26:37 · 204 阅读 · 1 评论 -
每日一道算法题LeetCode209:Minimum Size Subarray Sum(长度最小的子数组)
长度最小的子数组题目分析题解暴力滑动数组总结题目给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度。如果不存在符合条件的连续子数组,返回 0。题目链接:link.分析首先最简单的就是暴力求解,两重循环,找到最短的子数组即可。时间复杂度接近O(n2)暴力之后,我们自然而然地可以想到用滑动窗口来优化解法,将双重循环变为一重循环即可。题解暴力使用两重循环,值得注意的是,在内循环中,并不需要一直往后找直到sum比s大,内循环次数原创 2020-06-28 19:28:27 · 170 阅读 · 0 评论 -
每日一道算法题LeetCode41:First Missing Positive(缺少的第一个正数)
这里写目录标题题目分析题解对原数组进行重组总结题目给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。提示:你的算法的时间复杂度应为O(n),并且只能使用常数级别的额外空间。链接:link.分析开始没看到提示,还在想是不是出bug了,这个题是困难难度。后来看到了题目要求:时间复杂度O(n),并且不适用多余的空间。既然不能使用多余空间,那就只能在原数组上做文章。题解对原数组进行重组数组长度为n,将原数组进行重组,值为[0,n]的数每个数放在数组 n-1 位置。这样,循环完之后,原创 2020-06-27 18:55:56 · 162 阅读 · 0 评论