随笔分类 -  LeetCode

1 2 3 4 5 ··· 9 下一页
LeetCode题解
摘要:第一题 1880. 检查某单词是否等于两单词之和 题目链接:1880. 检查某单词是否等于两单词之和 逐位计算单词之和即可 class Solution { public: int count(string s) { int ans = 0; for(const auto& c: s) { ans 阅读全文
posted @ 2021-05-31 11:45 machine_gun_lin 阅读(42) 评论(0) 推荐(0)
摘要:第一题 1859. 将句子排序 题目链接:1859. 将句子排序 将单词切成只含英文字符的单词和数字的一对pair<string, int> 然后根据第二关键字对pair排序 排序后,把单词加到答案字符串ans里就行了 class Solution { private: using PSI = pa 阅读全文
posted @ 2021-05-20 14:17 machine_gun_lin 阅读(42) 评论(0) 推荐(0)
摘要:第一题 5759. 找出所有子集的异或总和再求和 题目链接:5759. 找出所有子集的异或总和再求和 直接爆搜,计算所有可能的子集的异或和curSum,加入到答案ans里 class Solution { private: int ans; int n; public: void dfs(vecto 阅读全文
posted @ 2021-05-16 20:42 machine_gun_lin 阅读(66) 评论(0) 推荐(0)
摘要:第一题 5605. 检查两个字符串数组是否相等 对于每个数组,都连接这个数组的所有单词为一个单词,然后直接判断这两个单词是否相等即可。 class Solution { public: bool arrayStringsAreEqual(vector<string>& word1, vector<s 阅读全文
posted @ 2020-11-22 18:22 machine_gun_lin 阅读(76) 评论(0) 推荐(0)
摘要:第一题 1656. 设计有序流 可以开一个字符串数组存放字符串,用一个额外的变量ptr存放ptr的位置,插入新的字符串的时候,检查从ptr开始是否有连续的按照id递增的序列即可。 代码如下: class OrderedStream { public: int n; int ptr; vector<s 阅读全文
posted @ 2020-11-16 21:21 machine_gun_lin 阅读(93) 评论(0) 推荐(0)
摘要:因为是二叉搜索树,所以中序遍历可以得到一个升序序列。 因此可以中序遍历这个二叉搜索树,把结果存在一个数组中,然后遍历这个数组,计算相邻值的最小值,这个最小值就是答案。 /** * Definition for a binary tree node. * struct TreeNode { * int 阅读全文
posted @ 2020-11-14 13:06 machine_gun_lin 阅读(64) 评论(0) 推荐(0)
摘要:直接按照题意进行深度优先搜索,只要当前位置不是地雷,且周围还存在方块可以揭露(搜索)时,就继续搜索,否则停止搜索,返回面板(board)。 (1)如果搜到当前位置是地雷,那就修改为'X'。 (2)用一个int变量cnt记录周围8个位置的地雷数量。 (i)如果cnt不为0,说明周围有地雷,用对应的数字 阅读全文
posted @ 2020-11-14 13:00 machine_gun_lin 阅读(95) 评论(0) 推荐(0)
摘要:要按照概率随机选择一个数,可以将数组的值看作一个区间上的长度,比如题目给的例子,当w = [1, 3]时,我们可以假设有一个一维的区间,区间前1/4是第0个数,区间的后3/4是第1个数。 区间总长度4也就是w数组所有数的和。 我们可以在总长度范围(0~4)内随机选择一个数,假设这个数是0~1,那么就 阅读全文
posted @ 2020-11-14 12:46 machine_gun_lin 阅读(141) 评论(0) 推荐(0)
摘要:题目说了N不会超过15,这就是在暗示我们用DFS。 直接DFS出1~N的排列,然后判断一下是否满足条件。 不过这里要剪枝一下,不需要枚举出所有的排列之后逐个判断,对于某个排列的某一位u,如果已经不满足条件了,即不满足u % i == 0 或者 i % u == 0,那么就无需枚举剩下的位。 这题不加 阅读全文
posted @ 2020-11-14 12:29 machine_gun_lin 阅读(119) 评论(0) 推荐(0)
摘要:题目说数组长度最长可能到50000,所以如果暴力枚举子数组的起点、终点,再计算数组和,复杂度就是o(n^3),肯定超时。 可以预处理出前缀和,这样只需要枚举起点和终点即可,但时间复杂度依然是O(n^2), 也不行。 这里需要一点奇技淫巧,因为数组只包含有0和1,如果一段子数组含有相同数量的0和1,则 阅读全文
posted @ 2020-11-14 12:14 machine_gun_lin 阅读(93) 评论(0) 推荐(0)
摘要:这题和LeetCode522. 最长特殊序列 II类似,都是在一个字符串数组中找出最长的一个“特殊序列”。 思路也和522题类似,都是对字符串数组按照长度从大到小排序,枚举的时候也是按照字符串长度从大到小枚举,只不过这题里我们要找到最长的,属于字符串s子序列的字符串。 判断某个字符串是否是另一个字符 阅读全文
posted @ 2020-11-14 11:58 machine_gun_lin 阅读(133) 评论(0) 推荐(0)
摘要:因为子数组是连续的,所以判断连续的子数组的和时,我们往往开一个前缀和数组预处理出所有数的前缀和,这样能够降低求子数组的和的时间复杂度。 这题需要单独处理k为0的情况,由于数组所有元素都是非负数,所以当k为0时,如果存在两个相邻的数的值都为0,则返回true,否则返回false。 使用前缀和判断是否存 阅读全文
posted @ 2020-11-14 11:38 machine_gun_lin 阅读(112) 评论(0) 推荐(0)
摘要:可以将字符串数组按照长度从大到小进行排序,然后从前往后遍历,找到第一个特殊序列,这个特殊序列的长度就是答案,如果遍历完数组,都没有找到特殊序列,这返回-1。 特殊序列的判断方法如下: (1)如果这个字符串存在和它相同的字符串(排序后这两个字符串是相邻的),则这个字符串不是特殊序列。 (2)从最开始( 阅读全文
posted @ 2020-11-14 11:25 machine_gun_lin 阅读(137) 评论(0) 推荐(0)
摘要:根据题意,最长特殊序列就是一个字符串独有的最长子序列,也就是说找到不是另一个字符串子序列的最长子序列。 题目给了两个字符串,如果两个字符串长度不一致,那么长的那个字符串肯定不是短的字符串的子序列,直接返回长的字符串的长度即可。 如果两个字符串长度一致,只有当两个字符串相等时,才不存在最长特殊序列,否 阅读全文
posted @ 2020-11-14 11:04 machine_gun_lin 阅读(75) 评论(0) 推荐(0)
摘要:题目给出了正确的大写用法的三种情况,直接根据情况判断即可。 首先要判断第一个字母是否是大写字母,如果第一个字母不是大写字母,那么单词后面如果出现小写字母,这个单词就不是正确的大写用法。 如果第一个字母是大写字母,就判断从第二个字母开始到单词结尾的所有字母是否都是小写字母或者都是大写字母,如果都是小写 阅读全文
posted @ 2020-11-14 10:57 machine_gun_lin 阅读(83) 评论(0) 推荐(0)
摘要:因为n_rows和n_cols最大能到104,所以不能开二维数组,因为那样空间复杂度回到108。 题目说了调用flip和reset的次数加起来不会超过1000次,所以矩阵是比较稀疏的,我们只需要记录所有1的位置即可。 我们可以用一个哈希表记录所有1的位置。为了方便,我们把二维的位置映射到一个int变 阅读全文
posted @ 2020-11-12 10:23 machine_gun_lin 阅读(94) 评论(0) 推荐(0)
摘要:用dp[i]表示当面值为i的时候,不同的方案个数。目标是求出凑出amount的方案个数,也就是dp[amount]。 对于每个coins[i],可以得到当金额j为coins[i] ~ amount的方案数dp[j] += d[j - coins[i],也就是金额j可以由金额j - coins[i]加 阅读全文
posted @ 2020-11-12 10:08 machine_gun_lin 阅读(47) 评论(0) 推荐(0)
摘要:首先,我们可以把所有洗衣机内的衣服数量累加求和,得到总的衣物的数量sum,假设洗衣机的数量为n,如果sum % n不为0,则无解,因为无法让所有洗衣机的数量相同。 如果sum % n为0,我们求出sum / n的结果avg,也就是最终当所有洗衣机衣服数量相同时每台洗衣机的衣服数量。 题目要我们求让所 阅读全文
posted @ 2020-11-12 09:52 machine_gun_lin 阅读(129) 评论(0) 推荐(0)
摘要:经典动态规划问题。用dp[i][j]表示字符串s的以i开头,以j结尾的子串的最大回文子序列的长度。我们要求的s的最长回文子序列的长度就是dp[0][n - 1]。 考虑一下数组的初始化,对于所有的i(0 ⇐ i < n),都有dp[i][i] = 1,表示单个字母可以组成一个长度为1的回文子序列。 阅读全文
posted @ 2020-11-12 09:26 machine_gun_lin 阅读(91) 评论(0) 推荐(0)
摘要:层次遍历,找出每一行的最大值。 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), le 阅读全文
posted @ 2020-11-11 22:36 machine_gun_lin 阅读(54) 评论(0) 推荐(0)

1 2 3 4 5 ··· 9 下一页