【LeetCode】
文章平均质量分 54
CodeFriday
账号已停更
展开
-
<LeetCode>839. 相似字符串组
题目描述题目链接:https://leetcode-cn.com/problems/similar-string-groups/解题思路提示不靠谱,String数组长度有超过100的测试点!!!今日随机题,又双叒叕并查集,连续三天并查集题目~一个String当作一个节点,两个String只交换一次字符就相等说明联通,考虑每个String与其他所有String是否联通,检查是否连通,暴力比较字符不同的位置超过2个说明不连通。并查集使用路径压缩,方便最后直接统计最大连通分量,即直接看p[i]==原创 2021-01-31 22:28:13 · 168 阅读 · 0 评论 -
<LeetCode>778. 水位上升的泳池中游泳
题目描述题目链接:https://leetcode-cn.com/problems/swim-in-rising-water/解题思路和778. 水位上升的泳池中游泳差不多模子,思路都是二维表每个格子当作图节点,一个图中找路径的问题。数组范围确定了的。第一种解决办法:并查集给平台每个格子编号,从左到右从上到下0~N*N-1,把平台高度当作key,平台编号当作value存到一个数组,这一步避免排序!核心思想:一个i增长表示此时水位高度,平台高度低于这个水位高度的就并入此时连通子图中,其实就是原创 2021-01-30 22:34:11 · 156 阅读 · 0 评论 -
<LeetCode>1631. 最小体力消耗路径
题目描述题目链接解题思路开始想着,每个节点4种选择,用搜索算法试试。但是复杂度指数级别,又不能设计好的启发式剪枝,放弃。动态规划?看起来每个状态只与相邻4个状态有关,但是需要考虑全局路径,也不行。于是想着把给的数组转换为一个图。行列<=100,最多10000个节点,应该是可行的。每个节点最多出去4条边,边的权值为二维数组相邻格子之差的绝对值。得到一个有向图之后,题面转换为找起点到终点的最优路径,路径花费值是最大边。这里有多种解决方式。Dijsktra最短路算法需要重新定义边的原创 2021-01-29 18:47:12 · 148 阅读 · 0 评论 -
<LeetCode>135.分发糖果
每日一题day8问题描述求解思路开始像两边同时顾,但是好像不行官方给的求解思路:开始每人一颗糖,先考虑每个孩子的左边,就如果分数比左边的高,那他至少比前一个人多一颗糖果。但是还要考虑右边的情况。上述同样方法,每个人一颗糖,完后从右往左看,如果比右边的分数高,就至少比他多一颗糖。然后综合两种规则所得每个孩子的糖的数量,取最大值。即他一定满足分数高于两边的孩子时,糖一定更多。C++实现class Solution {public: int candy(vector<int原创 2020-12-24 17:04:09 · 115 阅读 · 1 评论 -
<LeetCode>387.字符串中的第一个唯一的字符
每日一题day7题目描述求解思路不知道一次遍历能不能解决。但两次遍历肯定能出。第一次记录一下每个字符出现的次数。第二次找第一个只出现一次的字符。C++实现class Solution {public: int firstUniqChar(string s) { int a[27]={0}; int ans = -1; for(char ch : s) a[ch-'a']++; for(int i原创 2020-12-23 23:51:01 · 107 阅读 · 0 评论 -
<LeetCode>103.二叉树的锯齿形层序遍历
每日一题day6题目描述求解思路官方求解思路翻转相对麻烦。按照层序遍历标准写法(即每层都是从左到右的),然后每遍历完一层之后,把存到结果vector中的顺序给改变一下,最开始存的顺序从左到右(即第0层),用一个bool标志位记录即可。如何知道遍历完一层用一个队列保存节点,求队列大小l,然后从队列取l次节点,即遍历完一层,此时队列中保存的就是下一层节点。C++实现public: vector<vector<int>> zigzagLevelOrder(Tree原创 2020-12-22 17:11:55 · 151 阅读 · 0 评论 -
<LeetCode>746.使用最小花费爬楼梯
每日一题day5题目描述求解思路动态规划,楼梯上的数字理解成离开这一阶梯需要体力值dp[i]表示达到阶梯i的最小体力值n级阶梯从 0 ~ n-1 编号,最后求dp[n]的值状态转移方程:dp[i] = min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]),i>2时dp[0]=dp[1]=0,可以选0或者1为起点C++实现代码class Solution {public: int minCostClimbingStairs(vector<原创 2020-12-21 18:32:08 · 103 阅读 · 0 评论 -
<LeetCode>316.去除重复字母
每日一题day4题目描述求解思路当前结果用一个栈保存从头到尾遍历字符串,每次遇到一个新的(结果栈中没有该字符)字符时,如果比当前栈顶值小,并且后面还会出现这个字符,就舍弃栈顶字符(可能不止舍弃一次)。因此需要一个数组保存26个字符的个数以及是否在结果栈中。学到了一些新知识:遍历string的一种写法for(char ch : s)相当于C++的:for( int i = 0; i < s.length(); i++) { s[i].... }使用for (char原创 2020-12-20 23:28:23 · 180 阅读 · 0 评论 -
<LeetCode>48.旋转图像
每日一题day3题目描述解题思路先求转置,再逐行翻转,用到一个辅助变量交换两个数。C++代码class Solution {public: void rotate(vector<vector<int>>& matrix) { int l = matrix.size(); for(int i = 0;i < l;i++){ for(int j = i;j < l;j++){原创 2020-12-19 11:41:12 · 106 阅读 · 1 评论 -
<LeetCode>389.找不同
每日一题题目描述题解string遍历记录小写字母出现的次数,两个字符串出现字符次数不一样的就是多的字符。时间复杂度O(n+m),n和m表示两个字符串长度class Solution {public: char findTheDifference(string s, string t) { int a[27]={0},b[27]={0}; int l = s.size(); for(int i = 0;i < l;i++){原创 2020-12-18 20:45:53 · 103 阅读 · 1 评论 -
<LeetCode>714. 买卖股票的最佳时机含手续费
题目描述解题思路动态规划。状态定义dp[i][0]:第i天不持有股票的最大利润dp[i][1]:第i天持有股票的最大利润状态转移方程dp[i][0]=max(dp[i-1][0],dp[i-1][1]+prices[i]-fee)第i天不持有股票最大利润有两种可能:前一天(第i-1天)不持有,或者前一天持有今天卖出了。dp[i][1]=max(dp[i-1][0]-prices[i],dp[i-1][1])第i天持有股票最大利润有两种可能:前一天(第i-1天)持有,或者前一原创 2020-12-17 23:51:30 · 96 阅读 · 0 评论