随笔分类 -  LeetCode

上一页 1 ··· 3 4 5 6 7 8 9 下一页
LeetCode题解
摘要:判断S2是否是S1的扰乱字符串。根据题目的定义,S1如果经过若干次对于部分子串的翻转操作能够得到S2,则S2是S1的扰乱字符串。 首先,如果S2是S1的扰乱字符串,那么S1中每个字符的出现次数必然和S2中每个字符的出现次数一致,也就是说,我们用两个字符串S3、S4备份一下S1和S2, 对S3和S4排 阅读全文
posted @ 2020-07-17 22:57 machine_gun_lin 阅读(148) 评论(0) 推荐(0)
摘要:要根据链表节点的值是否大于等于x将链表划分为两段,首先需要链表中大于等于x和小于x的节点的个数,所以无法直接在原链表上做修改。 既然要分开大于等于x的值和小于x的值,我们可以考虑开两个链表,这样按顺序扫描原链表的时候,小于x的值接到第一个链表,大于等于x的值接到第二个链表。 然后再把这两个链表连接起 阅读全文
posted @ 2020-07-17 21:39 machine_gun_lin 阅读(82) 评论(0) 推荐(0)
摘要:这题其实是84题的进阶版。 要求最大矩形,同样也是枚举所有矩形,关键就在于如何枚举。 如果直接枚举所有起点和终点,复杂度最起码是O(n^4),超时。 所以要换种方式枚举,可以考虑固定住所有矩形的底边,比如以每一行作为底边,枚举以这个底边,往上有哪些矩形,分别计算面积。 固定住底边之后,网上所有的连续 阅读全文
posted @ 2020-07-17 11:58 machine_gun_lin 阅读(124) 评论(0) 推荐(0)
摘要:要求能勾勒出来的矩形的最大高度,很自然的想法就是枚举所有矩形的宽度和高度,再通过高度和宽度的乘积求出所有矩形的面积,这样就可以知道最大矩形的面积了。 暴力做法是,枚举所有矩形的宽度(也就是枚举左边界和右边界),再求出左边界和右边界内柱子的最小高度(瓶颈高度),然后得到矩形的面积。 代码如下: cla 阅读全文
posted @ 2020-07-17 11:01 machine_gun_lin 阅读(154) 评论(0) 推荐(0)
摘要:5177. 转变日期格式 思路:按照空格划分出年月日,年已经是数字形式,不需要做处理。月是英文单词的缩写,需要对应到相应的数字。 对于日,只需要把结尾的英文序数词去掉,只留下数字即可。 这里要注意月和日可能是个位数,这种情况下要在前面补一个0. class Solution { string mon 阅读全文
posted @ 2020-07-13 11:01 machine_gun_lin 阅读(136) 评论(0) 推荐(0)
摘要:暴力枚举即可,注意特判k为0的情况。 class Solution { public: vector<int> divingBoard(int shorter, int longer, int k) { if(k == 0) { return {}; } vector<int> res; set<i 阅读全文
posted @ 2020-07-08 00:32 machine_gun_lin 阅读(78) 评论(0) 推荐(0)
摘要:判断当前节点currentNode的值和它的next指针所指向的节点的值是否相等,如果相等,就一直向后移动next指针直到遇到 next指针所指节点的值和currentNode的值不相等,这时将currentNode的next指针指向这个不相等的节点即可。 当currentNode和currentN 阅读全文
posted @ 2020-07-06 17:32 machine_gun_lin 阅读(90) 评论(0) 推荐(0)
摘要:题意是要删除一个排序链表里所有重复出现的数字,链表里留下的数字都是只出现一次的数字。 思路:用两个指针currentNode和nextNode扫描一遍有序链表,最开始初始化currentNode为链表的附加头节点dummy, nextNode为currentNode的下一个节点,然后不断判断next 阅读全文
posted @ 2020-07-06 11:57 machine_gun_lin 阅读(125) 评论(0) 推荐(0)
摘要:方法一 先排序后二分 要判断数组里是否存在target,可以先对数组排序,然后直接二分查找。 这样时间复杂度是O(nlogn)。 class Solution { public: bool search(vector<int>& nums, int target) { sort(nums.begin 阅读全文
posted @ 2020-07-06 11:10 machine_gun_lin 阅读(118) 评论(0) 推荐(0)
摘要:这题和LeetCode第51题做法一样,只不过不是记录具体方案,而是个数。分析见第51题。 代码如下: class Solution { int res = 0; int n; vector<string> path; vector<bool> cols, diagram, anti_diagram 阅读全文
posted @ 2020-07-05 23:40 machine_gun_lin 阅读(77) 评论(0) 推荐(0)
摘要:题意是给定一个N × N大小的棋盘,求不同的N皇后方案的个数。N皇后的方案指,N个皇后放在棋盘上,互相不能攻击到。 国际象棋里,皇后可以横竖斜走若干步,所以一个方案是合法的,必须满足任意一个皇后所在的行、列、对角线、斜对角线都没有其他皇后。 我们要求的就是这样的方案的个数。 由于每行只能放一个皇后, 阅读全文
posted @ 2020-07-05 23:16 machine_gun_lin 阅读(153) 评论(0) 推荐(0)
摘要:题意是给定一个已排序数组,我们需要原地修改数组,使得相同元素最多留下2个,并且返回新的数组的大小。 这题还是双指针做法,最开始左右指针都在0位置,左指针表示新的已排序数组的末尾元素位置, 右指针从左向右遍历逐个判断元素是否可以加入“新数组”中。 由于相同元素最多只能留两个,且数组是已排序的,所以对于 阅读全文
posted @ 2020-07-05 02:32 machine_gun_lin 阅读(98) 评论(0) 推荐(0)
摘要:又是一道DFS回溯,枚举二维字符数组的所有字符作为起点,判断以这个字符作为起点DFS是否能得到word,可以就返回true, 如果所有起点都不行就返回false。 DFS函数就按照方向进行搜索,上下左右是个方向分别去搜,返回的情况有: 1. 某方向下一个字符和word的下一个字符不相等,回溯,返回f 阅读全文
posted @ 2020-07-05 02:11 machine_gun_lin 阅读(113) 评论(0) 推荐(0)
摘要:方法一(DFS回溯) 求出所有可能的子集,就是要遍历一遍DFS递归树,把所有子集全都压入结果数组中。 class Solution { vector<vector<int>> res; vector<int> onePath; //onePath是递归树的一条路径(一个子集) public: vec 阅读全文
posted @ 2020-07-05 01:06 machine_gun_lin 阅读(105) 评论(0) 推荐(0)
摘要:DFS回溯,从左至右选数,加入一个一维数组oneCombination中,当oneCombination的大小等于k,表示已经选了k个数, 将oneCombination压入结果数组res中。 DFS的函数签名可以写为void DFS(int n, int k, int startPos, vect 阅读全文
posted @ 2020-07-05 00:02 machine_gun_lin 阅读(78) 评论(0) 推荐(0)
摘要:滑动窗口(双指针) 要在字符串S里找出包含字符串T的所有字符的最小子串(注意只需要包含字符串T的所有字符),不需要子串就是T。 所以我们可以扫描一遍字符串S,找出一个满足条件包含字符串T的所有字符串子串,然后根据长度是否比之前记录的字符串长度小,更新最小子串。 扫描字符串S需要用到滑动窗口(双指针) 阅读全文
posted @ 2020-07-04 23:24 machine_gun_lin 阅读(96) 评论(0) 推荐(0)
摘要:这道题的题意是,给出一个一维数组,数组中的元素只可能是0,1,2,分别表示红色、白色和蓝色。 我们需要做一个排序,使得0全部在数组前面,1在中间,2在后面。 (不过不能用sort函数) 方法一(常数空间,非一趟扫描) 可以用三个变量分别记录红色、白色和蓝色的出现次数,然后根据出现的次数,修改数组即可 阅读全文
posted @ 2020-07-04 22:51 machine_gun_lin 阅读(109) 评论(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 阅读(214) 评论(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)

上一页 1 ··· 3 4 5 6 7 8 9 下一页