
程序员面试金典刷题笔记
刷题记录
zaker123
永远年轻,永远热泪盈眶!
展开
-
[LeetCode](面试题 17.13)恢复空格
题目哦,不!你不小心把一个长篇文章中的空格、标点都删掉了,并且大写也弄成了小写。像句子"I reset the computer. It still didn’t boot!"已经变成了"iresetthecomputeritstilldidntboot"。在处理标点符号和大小写之前,你得先把它断成词语。当然了,你有一本厚厚的词典dictionary,不过,有些词没在词典里。假设文章用sentence表示,设计一个算法,把文章断开,要求未识别的字符最少,返回未识别的字符数。注意:本题相对原题稍作改动,只原创 2020-07-14 01:15:30 · 139 阅读 · 0 评论 -
[LeetCode](面试题 16.11)跳水板
题目你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。你必须正好使用k块木板。编写一个方法,生成跳水板所有可能的长度。返回的长度需要从小到大排列。示例:输入:shorter = 1longer = 2k = 3输出: {3,4,5,6}提示:0 < shorter <= longer0 <= k <= 100000解题思路首先考虑两种边界情况。1)如果 k=0,则不能建造任何跳水原创 2020-07-14 00:51:39 · 237 阅读 · 0 评论 -
[LeetCode](面试题 02.01)移除重复节点
题目编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。示例1: 输入:[1, 2, 3, 3, 2, 1] 输出:[1, 2, 3]示例2: 输入:[1, 1, 1, 1, 2] 输出:[1, 2]提示:链表长度在[0, 20000]范围内。链表元素在[0, 20000]范围内。进阶:如果不得使用临时缓冲区,该怎么解决?解题思路遍历链表,用一个哈希集合(HashSet)来存储所有出现过的节点。具体地,我们从链表的头节点 head 开始进行遍历,遍历的指针记为原创 2020-06-28 01:13:01 · 152 阅读 · 0 评论 -
[LeetCode](面试题 08.11)硬币
题目硬币。给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。(结果可能会很大,你需要将结果模上1000000007)示例1: 输入: n = 5 输出:2 解释: 有两种方式可以凑成总金额:5=55=1+1+1+1+1示例2: 输入: n = 10 输出:4 解释: 有四种方式可以凑成总金额:10=1010=5+510=5+1+1+1...原创 2020-04-26 23:07:06 · 274 阅读 · 1 评论 -
[LeetCode](面试题 10.01)合并排序的数组
解题思路解法一:直接合并后排序(不推荐)复杂度分析时间复杂度:O((m+n)log(m+n)),排序序列长度为 m+n,套用快速排序的时间复杂度即可,平均情况为 O((m+n)log(m+n))。空间复杂度:O(log(m+n)),排序序列长度为 m+n,套用快速排序的空间复杂度即可,平均情况为 O(log(m+n))。解法二:双指针法分别为两个数组设置一个指针pa与pb,来作为队列的...原创 2020-03-26 17:12:02 · 146 阅读 · 0 评论 -
[LeetCode](面试题 01.07)旋转矩阵
解题思路解法一:使用辅助数组先将原数组复制到这个新数组中,再根据这个新复制的数组对原数组修改。复杂度分析:时间复杂度:O(N^2),其中 N 是 matrix 的边长。空间复杂度:O(N^2),我们需要使用一个和 matrix 的大小相同的辅助数组。解法二:原地翻转例如A = [[1,2,3], [4,5,6], [7,8,9]]要得到A1 = [[7,4...原创 2020-04-07 13:00:06 · 274 阅读 · 0 评论 -
[LeetCode](面试题 17.21)直方图的水量
解题思路具体思路可参考 42. 接雨水代码解法一:动态规划class Solution: def trap(self, height: List[int]) -> int: n = len(height) if n == 0: return 0 leftmax = [0]*n rightm...原创 2020-04-05 13:48:16 · 281 阅读 · 0 评论 -
[LeetCode](面试题 17.16)按摩师
解题思路动态规划:定义 dp[i][0] 表示第i个预约不接,dp[i][1]表示第i个预约接。根据题意,相邻的预约不能接。因此当第i个预约不接时,第i-1个预约接不接都可以,则 dp[i][0] = max(dp[i-1][0], dp[i-1][1]);而当第i个预约接受的时候,第i-1个预约不能接,则dp[i][1] = dp[i-1][0]+nums[i],最后返回max(dp[n]...原创 2020-03-28 12:08:15 · 224 阅读 · 0 评论 -
[LeetCode](面试题 01.06)字符串压缩
解题思路题意很简单,直接从左向右遍历字符串即可,分别设置 i、j 两个指针,i 指向当前字符,j 从当前字符i向后遍历,当 j 遍历到与 i 字符不同时,表示遍历到了一个新的字符,则i字符的个数为 (j-i),最后将i字符与个数拼接即可。步骤:1)判断字符串是否为空串,是则直接返回空串;2)分别设置 i、j 两个指针,初始值都为0,进入循环,直到 j 到达字符串末尾,即 while j&l...原创 2020-03-27 00:32:43 · 187 阅读 · 0 评论