
LeetCode
文章平均质量分 78
LeetCode
岛屿绕城
向着未知怀有敬畏之心。
展开
-
LeetCode双周赛第52场 5744. 旋转盒子
给你一个 m x n 的字符矩阵 box ,它表示一个箱子的侧视图。箱子的每一个格子可能为:‘#’ 表示石头‘*’ 表示固定的障碍物‘.’ 表示空位置这个箱子被 顺时针旋转 90 度 ,由于重力原因,部分石头的位置会发生改变。每个石头会垂直掉落,直到它遇到障碍物,另一个石头或者箱子的底部。重力 不会 影响障碍物的位置,同时箱子旋转不会产生惯性 ,也就是说石头的水平位置不会发生改变。题目保证初始时 box 中的石头要么在一个障碍物上,要么在另一个石头上,要么在箱子的底部。请你返回一个 n x原创 2021-05-16 09:47:57 · 179 阅读 · 0 评论 -
LeetCode周赛第206场 5513. 连接所有点的最小费用
思路:首先思路就是通过最小生成树的思想去将所有点连接起来,这样就能保证我们的得到的是最小费用我们把点存在一个边的结构体中,通过一个二重循环将所有的边保存下来,然后再用sort函数将其从小到大排序接下来就是用并查集依次将不同的边连接起来,然后最终能够将点连在一起,这时得到的就是最小费用。代码用的是kruskal的思想,时间复杂度还是有点高的代码:class Solution {public: struct Edge { int u,v,w; }edge[1.原创 2020-09-13 15:19:45 · 240 阅读 · 0 评论 -
LeetCode周赛第206场 5512. 统计不开心的朋友
思路:模拟即可,代码写的时候又臭又长代码:class Solution {public: int unhappyFriends(int n, vector<vector<int>>& preferences, vector<vector<int>>& pairs) { int ans=0; map<int,int>temp; for(int.原创 2020-09-13 15:10:00 · 136 阅读 · 0 评论 -
LeetCode周赛第206场 5511. 二进制矩阵中的特殊位置
思路:模拟即可代码:class Solution {public: bool check(int x,int y,vector<vector<int>>& g) { for(int i=0;i<g[0].size();i++) { if(g[x][i]==1&&i!=y) return false; } .原创 2020-09-13 15:06:43 · 143 阅读 · 0 评论 -
LeetCode 109. 有序链表转换二叉搜索树 (递归)
思路:最简单的做法就是先把链表中的值按序存入一个vector中,然后通过简单的二分来找到子树的根结点,然后用递归把它们都构建成一棵树即可。代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; *//** * Definition f.原创 2020-08-18 09:38:05 · 117 阅读 · 0 评论 -
LeetCode 289. 生命游戏 (状态同步)
思路:这道题的主要难点就在于如果你直接根据规则更新原始数组,那么就做不到题目中说的 同步 更新。假设你直接将更新后的细胞状态填入原始数组,那么当前轮次其他细胞状态的更新就会引用到当前轮已更新细胞的状态,但实际上每一轮更新需要依赖上一轮细胞的状态,是不能用这一轮的细胞状态来更新的。当然我们可以额外复制一个数组就可以解决上述的问题,但是如果要想原地直接解决的话,我们也可以使用位运算。原始每个活细胞我们可以看做是ob01,死细胞我们可以看做ob00,所以当活细胞还是活细胞时我们可以把原来的值改为ob11.原创 2020-08-18 09:23:52 · 192 阅读 · 0 评论 -
LeetCode 第 202 场周赛 1553. 吃掉 N 个橘子的最少天数(简单记忆化搜索)
思路:朴素的DFS或者BFS肯定会超时的,只需要加上一个记录的set来剪枝即可。同时利用BFS层序遍历的特点,输出第一个找到的答案。代码:class Solution {public: int minDays(int n) { int ans=0; unordered_set<int> temp; queue<int> q; q.push(n); temp.insert(n); .原创 2020-08-18 09:11:14 · 202 阅读 · 0 评论 -
LeetCode 八月打卡day11 130. 被围绕的区域(DFS)
题目链接思路:我们可以先对边界上的’O’进行DFS,将所有’O’先修改为其他字符,这里取了’Y’字符。对四条边搜索完后剩下的’O修改为’X’字符后,我们再将’Y’字符修改为’O’字符,就能得到正确答案。代码:class Solution {public: int dx[4]={0,0,1,-1}; int dy[4]={1,-1,0,0}; void dfs(int x,int y,vector<vector<char>>& boa原创 2020-08-11 10:44:56 · 123 阅读 · 0 评论 -
LeetCode 八月打卡day10 696. 计数二进制子串(字符串模拟)
题目链接思路:我们可以将字符串s按照 0 和 1 的连续段分组,“00110011"就可以压缩成"0101”,同时记录每一位的连续的值。然后我们将压缩完的字符串每相邻两位进行对比,将小的数字与答案值相加。代码:class Solution {public: vector<int> cnt; int countBinarySubstrings(string s) { int con=0; int ans=0; if(原创 2020-08-10 19:51:38 · 177 阅读 · 0 评论 -
LeetCode 八月打卡day9 93. 复原IP地址(DFS)
题目链接思路:简单的DFS,搜索的时候要注意以0开头的数字。代码:class Solution {public: vector<string> ans; bool check(string s) { int sum=0; string temp; for(int i=0;i<s.size();i++) { if(s[i]!='.') {原创 2020-08-10 19:46:43 · 129 阅读 · 0 评论 -
LeetCode 八月打卡day4 207. 课程表(拓扑排序)
题目链接思路:这题主要考查的就是拓扑排序的思想,我们可以统计每一个点的入度,同时构建起邻接矩阵。先将入度为0的点存入BFS的队列中,入读为0说明该课程不是任何课程的先导课。然后再对队列中的每个点的出度进行遍历,同时每遍历一次就将遍历的点的入度减1,同时将新的入度为0的点存入队列中,同时在遍历的过程中统计一共有多少个点进入过该队列中。当BFS结束时,我们判断一下在遍历的过程中一共有多少个点进入过该队列中,如果所有点都进入过则输出"true",否则输出"false"。代码:class Sol原创 2020-08-04 15:55:47 · 174 阅读 · 0 评论 -
LeetCode 八月打卡day3 415. 字符串相加(高精度模拟)
题目链接思路:比较简单的模拟题,判断出哪一个字符串为较长字符串,然后再将短字符串和长字符串一位一位的相加,同时记录进位代码:class Solution {public: string addStrings(string num1, string num2) { string a,b; int pos=0; if(num1.size()>=num2.size()) { a=num1;原创 2020-08-04 15:44:47 · 176 阅读 · 0 评论 -
LeetCode 八月打卡day2 114. 二叉树展开为链表(递归)
题目链接依据二叉树展开为链表的特点,使用后序遍历完成展开。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:原创 2020-08-04 15:40:23 · 175 阅读 · 0 评论 -
LeetCode 八月打卡day1 632. 最小区间(multimap的应用——键值可重复的存储)
题目链接思路:利用multimap将二维vector中的每个元素以(元素值,组别)的方式存入,由于元素值可能重复,所以这里使用multmap来存储。利用滑动窗口对multimap中的存入的元素从头到尾开始进行线性的遍历,同时用一个map来记录有多少组的元素已经被遍历。当检测到map.size()包含每组时,开始将窗口左端缩小,同时记录过程中左端和右端的最小差值。最后得到的左端和右端值就是答案class Solution {public: vector<int> sma原创 2020-08-02 17:31:15 · 200 阅读 · 0 评论 -
LeetCode 第 29 场双周赛 5434. 删掉一个元素以后全为 1 的最长子数组
题目链接可以用滑动窗口搞的其实,但是模拟也可以class Solution {public: int longestSubarray(vector<int>& nums) { int ans=0; int pos=1; int y=0; int temp=0; int flag=0; int z=1; for(int i=0;i<nums.size(原创 2020-06-28 14:29:58 · 183 阅读 · 0 评论 -
LeetCode周赛第193场 5441. 保证文件名唯一
这题主要卡在超时上,特别烦,不过最后还是过了class Solution {public: vector<string> getFolderNames(vector<string>& names) { vector<string> ans; map<string ,int> temp; for(int i=0;i<names.size();i++) { ..原创 2020-06-21 15:26:15 · 180 阅读 · 0 评论 -
LeetCode 第 25 场双周赛 5386. 检查一个字符串是否可以打破另一个字符串
题目链接个人觉得这题算是Easy难度的,因为判断条件太直白了,当时的思路就是按字典序排分别找到s1和s2的最大值,然后进行一下比较就完事了。代码如下:class Solution {public: bool checkIfCanBreak(string s1, string s2) { vector<char> a(s1.size()),b(s1.siz...原创 2020-05-03 13:53:33 · 165 阅读 · 0 评论 -
LeetCode 第 25 场双周赛 5385. 改变一个整数能得到的最大差值
题目链接当时我还以为直接模拟的话10^8的数据会超时呢,所以就没想着却用暴力,看来还是想多了,直接模拟的话思路就很清晰了,只要两个0到10的嵌套循环把每个数字都换一遍找最大最小值就可。代码如下:class Solution {public: int maxDiff(int num) { string s = to_string(num); int m...原创 2020-05-03 13:48:52 · 134 阅读 · 0 评论 -
LeetCode 第 25 场双周赛 5384. 拥有最多糖果的孩子
题目链接这一题白给,只不过当时写的的时候,代码还是过于冗杂了,其实应该很短就能写完,这一块主要是自己的临场能力还不太行吧,而且吐槽一下当时的评测机,第一题愣是转了大概一分钟才过了代码:class Solution {public: vector<bool> kidsWithCandies(vector<int>& candies, int extra...原创 2020-05-03 13:41:16 · 166 阅读 · 0 评论 -
动态规划(DP)经典简单入门题目集
这里写目录标题一、三步问题二、连续数列三、打家劫舍四、不同路径五、最小路径和一、三步问题题目链接我们可以列出一个数组dp[n],在这个数组中的第i位保存的数据就是上i个楼梯有多少种走法,由此我们可以先得到:dp[1]=1;dp[2]=2;dp[3]=4;同时我们可以推出状态转移访方程为:dp[i]=(dp[i-1]+dp[i-2]+dp[i-3])代码如下:class So...原创 2020-04-29 23:18:39 · 12491 阅读 · 1 评论 -
LeetCode周赛第186场 5394. 对角线遍历 II(附带图解)
题目链接我们根据下标和可以将一组一组的数字分离成数组,存在map中,为了保证是按顺序的,所以可以从左下角开始遍历,根据遇到数字的下标和,将数字放进相应的数组里,最后依次输出即可class Solution {public: vector<int> findDiagonalOrder(vector<vector<int>>& nums...原创 2020-04-26 16:50:12 · 159 阅读 · 0 评论 -
LeetCode周赛第186场 5392. 分割字符串的最大得分
题目链接class Solution {public: int maxScore(string s) { int ans=0; int lsum=0,rsum=0; for(int i=0;i<s.size();i++) { if(s[i]=='1') rsum+=...原创 2020-04-26 15:52:38 · 192 阅读 · 0 评论 -
LeetCode周赛第186场 5393. 可获得的最大点数(前缀和)
题目链接代码:class Solution {public: int maxScore(vector<int>& cardPoints, int k) { vector<int> temp(cardPoints.size()+1); temp[0]=0; int n=cardPoints.size()...原创 2020-04-26 15:49:31 · 159 阅读 · 0 评论 -
2020力扣杯春季全国编程大赛个人向总结
第一题链接:拿硬币第一题基本上算是白送的,只要进行奇偶判断就行class Solution {public: int minCount(vector<int>& coins) { int ans=0; for(int i=0;i<coins.size();i++) { if(coins[...原创 2020-04-21 14:33:16 · 614 阅读 · 0 评论 -
LeetCode 2020春季赛 LCP 07. 传递信息(邻接矩阵判断两个点连通)
题目链接小朋友 A 在和 ta 的小伙伴们玩传信息游戏,游戏规则如下:有 n 名玩家,所有玩家编号分别为 0 ~ n-1,其中小朋友 A 的编号为 0每个玩家都有固定的若干个可传信息的其他玩家(也可能没有)。传信息的关系是单向的(比如 A 可以向 B 传信息,但 B 不能向 A 传信息)。每轮信息必须需要传递给另一个人,且信息可重复经过同一个人给定总玩家数 n,以及按 [玩家编号,对...原创 2020-04-18 22:11:10 · 523 阅读 · 0 评论 -
LeetCode周赛第184场 5382. HTML 实体解析器
题目链接「HTML 实体解析器」 是一种特殊的解析器,它将 HTML 代码作为输入,并用字符本身替换掉所有这些特殊的字符实体。HTML 里这些特殊字符和它们对应的字符实体包括:双引号:字符实体为 " ,对应的字符是 " 。单引号:字符实体为 ' ,对应的字符是 ' 。与符号:字符实体为 & ,对应对的字符是 & 。大于号:字符...原创 2020-04-12 12:18:51 · 219 阅读 · 0 评论 -
LeetCode周赛第184场 5381. 查询带键的排列
题目链接给你一个待查数组 queries ,数组中的元素为 1 到 m 之间的正整数。 请你根据以下规则处理所有待查项 queries[i](从 i=0 到 i=queries.length-1):一开始,排列 P=[1,2,3,…,m]。对于当前的 i ,请你找出待查项 queries[i] 在排列 P 中的位置(下标从 0 开始),然后将其从原位置移动到排列 P 的起始位置(即下标为 ...原创 2020-04-12 12:13:28 · 135 阅读 · 0 评论 -
LeetCode周赛第184场 5380. 数组中的字符串匹配
题目链接给你一个字符串数组 words ,数组中的每个字符串都可以看作是一个单词。请你按 任意 顺序返回 words中是其他单词的子字符串的所有单词。如果你可以删除 words[j] 最左侧和/或最右侧的若干字符得到 word[i] ,那么字符串 words[i] 就是 words[j]的一个子字符串。示例 1:输入:words = [“mass”,“as”,“hero”,“supe...原创 2020-04-12 12:09:00 · 194 阅读 · 0 评论 -
LeetCode 242. 有效的字母异位词
题目链接给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:输入: s = “anagram”, t = “nagaram”输出: true示例 2:输入: s = “rat”, t = “car”输出: false说明:你可以假设字符串只包含小写字母。进阶:如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况...原创 2020-04-05 20:22:53 · 117 阅读 · 0 评论 -
LeetCode 5360. 统计最大组的数目
题目链接给你一个整数 n 。请你先求出从 1 到 n 的每个整数 10 进制表示下的数位和(每一位上的数字相加),然后把数位和相等的数字放到同一个组中。请你统计每个组中的数字数目,并返回数字数目并列最多的组有多少个。示例 1:输入:n = 13输出:4解释:总共有 9 个组,将 1 到 13 按数位求和后这些组分别是:[1,10],[2,11],[3,12],[4,13],[5],[...原创 2020-04-05 17:20:31 · 253 阅读 · 0 评论 -
LeetCode第183场 周赛 非递增顺序的最小子序列
题目链接给你一个数组 nums,请你从中抽取一个子序列,满足该子序列的元素之和 严格 大于未包含在该子序列中的各元素之和。如果存在多个解决方案,只需返回 长度最小 的子序列。如果仍然有多个解决方案,则返回 元素之和最大 的子序列。与子数组不同的地方在于,「数组的子序列」不强调元素在原数组中的连续性,也就是说,它可以通过从数组中分离一些(也可能不分离)元素得到。注意,题目数据保证满足所有约束...原创 2020-04-05 17:18:36 · 193 阅读 · 0 评论 -
LeetCode74&&LeetCode240 搜索二维矩阵入门题型
题目来源:LeetCode74LeetCode240编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。LeetCode74 题目示例 1:输入:matrix = [[1, 3, 5, 7],[10, 11, 16, 20],[23, 30, 34, 50]...原创 2019-10-28 09:27:54 · 273 阅读 · 0 评论