摘要: 滑动窗口(双指针) 要在字符串S里找出包含字符串T的所有字符的最小子串(注意只需要包含字符串T的所有字符),不需要子串就是T。 所以我们可以扫描一遍字符串S,找出一个满足条件包含字符串T的所有字符串子串,然后根据长度是否比之前记录的字符串长度小,更新最小子串。 扫描字符串S需要用到滑动窗口(双指针) 阅读全文
posted @ 2020-07-04 23:24 machine_gun_lin 阅读(100) 评论(0) 推荐(0)
摘要: 这道题的题意是,给出一个一维数组,数组中的元素只可能是0,1,2,分别表示红色、白色和蓝色。 我们需要做一个排序,使得0全部在数组前面,1在中间,2在后面。 (不过不能用sort函数) 方法一(常数空间,非一趟扫描) 可以用三个变量分别记录红色、白色和蓝色的出现次数,然后根据出现的次数,修改数组即可 阅读全文
posted @ 2020-07-04 22:51 machine_gun_lin 阅读(112) 评论(0) 推荐(0)
摘要: 这道题是要我们在一个二维数组里搜索某个元素target,找到了返回true,没找到返回false。 这个二维数组性质是,每一行都是升序的,且每一行的最后一个元素小于下一行的第一个元素。 都说升序和查找了,显然应该想到二分。 这题我最开始先按行二分,确定target(如果在数组里)所在的行,再对这一行 阅读全文
posted @ 2020-07-04 22:03 machine_gun_lin 阅读(132) 评论(0) 推荐(0)
摘要: 解法一(使用O(mn)空间) 可以开一个额外的二维数组,记录每个位置的元素是否已被访问过。 然后我们遍历原来的二维数组,只要没被访问过且元素为0,那么就将该元素所在的行和列的元素值置为0, 并且将这一行的所有元素都设置为已经访问过,以免之后的遍历碰到被置为0的元素也将那一行那一列的元素置为0. 这里 阅读全文
posted @ 2020-07-04 21:22 machine_gun_lin 阅读(217) 评论(0) 推荐(0)
摘要: 考虑用一个二维dp数组表示所需的最小操作次数。 dp[i][j]表示将word1的前i个字符转换为word2的前j个字符所需要的最少操作次数。 由于操作的顺序对于最后操作的结果没有影响,所以我们假设操作总是从word1的前面字符操作到word1的后面字符。 如果word1的第i个字符等于word2的 阅读全文
posted @ 2020-07-04 19:50 machine_gun_lin 阅读(153) 评论(0) 推荐(0)
摘要: 这题是要实现Linux里的类似pwd命令的功能,给出一串绝对地址,绝对地址里每两个"/"之间可能含有".","..","",/等, 这些特殊情况都需要判断。 思路是,遍历path字符串,对于每两个"/"之间的字符串temp,根据字符串内容考虑是否要压入一个额外的string数组strs中。 strs 阅读全文
posted @ 2020-07-03 22:37 machine_gun_lin 阅读(227) 评论(0) 推荐(0)
摘要: 由于每次只能跳一阶或者两阶台阶,所以要到达每一阶台阶的方案数都是到达上一阶台阶的方案数 和到达上上阶台阶的方案数之和。 如果我们用dp[i]表示到达第i阶台阶的方案数,那么可以得到递推公式dp[i] = dp[i - 1] + dp[i - 2]; 这就是一个斐波那契数列,递推边界是dp[0] = 阅读全文
posted @ 2020-07-02 15:46 machine_gun_lin 阅读(103) 评论(0) 推荐(0)
摘要: 这题是要用二分寻找一个数的平方根的整数部分。 当然顺序搜索也是可以的,但是由于搜索范围1 ~ sqrt(x)是有序的,所以显然可以用二分搜索。 这题由于是返回整数部分,所以二分的判断稍微要多写几行,如果一个数pow(mid, 2) < x, 但pow(mid + 1, 2) > x,这种情况下是返回 阅读全文
posted @ 2020-07-02 15:38 machine_gun_lin 阅读(125) 评论(0) 推荐(0)
摘要: 这题是一道模拟题,需要我们模拟word等文本编辑器都有的一个文本自动对齐功能。 从测试样例可以看出,文本对齐有三种情况需要判断: **1. 如果某行只含有一个字符串,这时只需要左对齐。**比如某行可以放下100个字符,某单词长度98个字符, 这时不需要把这个单词左右对齐,让单词居中左右各一个空格,实 阅读全文
posted @ 2020-06-30 23:28 machine_gun_lin 阅读(248) 评论(0) 推荐(0)
摘要: 开两个栈helper和Queue来模拟队列,helper用来中转元素,Queue存放倒序(与元素入队顺序相反)的元素。 这样pop()的时候就相当于最先进入“队列”的元素出队。 举个例子:最开始有四个元素1, 2, 3, 4要入队,由于我们只有栈,我们希望在栈Queue中存放的顺序是4, 3, 2, 阅读全文
posted @ 2020-06-30 00:30 machine_gun_lin 阅读(80) 评论(0) 推荐(0)