wy的leetcode刷题记录_Day66
分类:
Code
简介:wy的leetcode刷题记录_Day66声明本文章的所有题目信息都来源于leetcode如有侵权请联系我删掉!时间:2023 4 10前言@TOC1019. 链表中的下一个更大节点今天的每日一题是:1019. 链表中的下一个更大节点题目介绍给定一个长度为 n 的链表 head对于列表中的每个节点,查找下一个 更大节点 的值。也就是说,对于每个节点,找到它旁边的第一个节点的值,这个节点的值 严格大于 它的值。返回一个整数数组 answer ,其中 answer[i] 是第 i 个节点( 从1开始 )的下一个更大的节点的值。如果第 i 个节点没有下一个更大的节点,设置 answer[i] = 0 。示例 1:输入:head = [2,1,5] 输出:[5,5,0] 示例 2:输入:head = [2,7,4,3,5] 输出:[7,0,5,5,0]思路一道简单的模拟题,分析题意下来就是,遍历整个节点,对于当前节点我们向后寻找第一个大于该节点的节点值,并将值放入一个vector,如果没有则放入0。代码/**
* Definition for singly linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr)
* ListNode(int x) : val(x), next(nullptr)
* ListNode(int x, ListNode *next) : val(x), next(next)
* };
*/
class Solution {
public:
vector<int> nextLargerNodes(ListNode* head) {
ListNode* curr=head;
ListNode*next=head >next;
vector<int> ans;
while(curr >next)
{
while(next)
{
if(next >val>curr >val)
{
ans.push_back(next >val);
break;
}
else
{
next=next >next;
}
}
if(next==nullptr)
{
ans.push_back(0);
}
curr=curr >next;
next=curr >next;
}
ans.push_back(0);
return ans;
}
};收获简单的模拟题OI WIKIOI WIKI从今天起,开始较为系统的学习算法的一些基础,不再盲目刷题了。
wy的leetcode刷题记录_Day63_复工开始!
分类:
Code
简介:wy的leetcode刷题记录_Day63_复工开始!声明本文章的所有题目信息都来源于leetcode如有侵权请联系我删掉!时间:前言考研期间只保持每日一题和可有可无的随机题@TOC1638. 统计只差一个字符的子串数目今天的每日一题是:1638. 统计只差一个字符的子串数目题目介绍给你两个字符串 s 和 t ,请你找出 s 中的非空子串的数目,这些子串满足替换 一个不同字符 以后,是 t 串的子串。换言之,请你找到 s 和 t 串中 恰好 只有一个字符不同的子字符串对的数目。比方说, "computer" and "computation" 只有一个字符不同: 'e'/'a' ,所以这一对子字符串会给答案加 1 。请你返回满足上述条件的不同子字符串对数目。一个 子字符串 是一个字符串中连续的字符。示例 1:输入:s = "aba", t = "baba" 输出:6 解释:以下为只相差 1 个字符的 s 和 t 串的子字符串对: ("aba","baba") ("aba", "baba") ("aba", "baba") ("aba", "baba") ("aba","baba") ("aba", "baba") 加粗部分分别表示 s 和 t 串选出来的子字符串。示例 2: 输入:s = "ab", t = "bb" 输出:3 解释:以下为只相差 1 个字符的 s 和 t 串的子字符串对: ("ab", "bb") ("ab", "bb") ("ab", "bb") 加粗部分分别表示 s 和 t 串选出来的子字符串。示例 3: 输入:s = "a", t = "a" 输出:0示例 4: 输入:s = "abe", t = "bbc" 输出:10思路枚举大法:理解题意之后可以概括为:比较字符串s的字串中是否与t字符串的任意子串差距为1(差距:不同字符串的个数)。整体解法为:使用指针i表示遍历到s字符串的子串的起始位置,指针j表示遍历到t字符串的子串的起始位置,使用计步器k来表示俩个字符串从起始位置的出发距离(子串长度)。外层循环是字符串的起始位置,内层循环是走的步数。使用全局变量ans表示符合条件的字串个数,局部变量diff表示当前走的步数的俩个子串的差距。局部变量diff:1.当diff>1的时候不符合题目条件不需要继续走下去了,变量k的循环可以中断了,然后更新俩个字符串其中之一的起点。2.每更新一次起点diff都需要重新置0。ans:每当走一步之后diff仍然是1,那么当前子字符串符合条件,ans++。代码class Solution {
public:
int countSubstrings(string s, string t) {
int s1=s.size();
int t1=t.size();
int ans=0;
for(int i=0;i<s1;i++)
{
for(int j=0;j<t1;j++)
{
int diff=0;
for(int k=0;k+i<s1&&k+j<t1;k++)
{
diff+=(s[i+k]==t[j+k]?0:1);
if(diff>1)
break;
else if(diff==1)
ans++;
}
}
}
return ans;
}
};收获复工日记!题目还是比较简单的。
wy的leetcode刷题记录_Day60
分类:
Code
简介:wy的leetcode刷题记录_Day60声明本文章的所有题目信息都来源于leetcode如有侵权请联系我删掉!时间:2022 12 21前言这几天身体不舒服,现在重新开始更新。@TOC1753. 移除石子的最大得分今天的每日一题是:1753. 移除石子的最大得分题目介绍你正在玩一个单人游戏,面前放置着大小分别为 a、b 和 c 的 三堆 石子。每回合你都要从两个 不同的非空堆 中取出一颗石子,并在得分上加 1 分。当存在 两个或更多 的空堆时,游戏停止。给你三个整数 a 、b 和 c ,返回可以得到的 最大分数 。示例 1:输入:a = 2, b = 4, c = 6 输出:6 解释:石子起始状态是 (2, 4, 6) ,最优的一组操作是:从第一和第三堆取,石子状态现在是 (1, 4, 5)从第一和第三堆取,石子状态现在是 (0, 4, 4)从第二和第三堆取,石子状态现在是 (0, 3, 3)从第二和第三堆取,石子状态现在是 (0, 2, 2)从第二和第三堆取,石子状态现在是 (0, 1, 1)从第二和第三堆取,石子状态现在是 (0, 0, 0) 总分:6 分 。示例 2: 输入:a = 4, b = 4, c = 6 输出:7 解释:石子起始状态是 (4, 4, 6) ,最优的一组操作是:从第一和第二堆取,石子状态现在是 (3, 3, 6)从第一和第三堆取,石子状态现在是 (2, 3, 5)从第一和第三堆取,石子状态现在是 (1, 3, 4)从第一和第三堆取,石子状态现在是 (0, 3, 3)从第二和第三堆取,石子状态现在是 (0, 2, 2)从第二和第三堆取,石子状态现在是 (0, 1, 1)从第二和第三堆取,石子状态现在是 (0, 0, 0) 总分:7 分 。思路方法一:可以使用模拟法,按照题目所说一点一点减下去得到答案。方法二:贪心:观察题目后,我们寻找最大值,我们发现当这个最大值大于其他俩个值的和的时候那么,其他俩个值只能与最大值进行分组,所以答案是剩下俩个值的和。如果最大值小于其他俩个值之和,那么其他俩个值不仅需要与最大值组合,剩下的这俩个之间也需要进行组合,最佳的答案就是三个值之和除以2.代码class Solution {
public:
int maximumScore(int a, int b, int c) {
int max_val=0;
// max_val=max(a,(b,c));
max_val=max({a,b,c});
if(max_val==a)
{
if(a>=b+c)
{
return b+c;
}
else
{
return (a+b+c)/2;
}
}
else if(max_val==b)
{
if(b>=a+c)
{
return a+c;
}
else
{
return (a+b+c)/2;
}
}
else
{
if(c>=a+b)
{
return b+a;
}
else
{
return (a+b+c)/2;
}
}
}
};收获观察题目很重要538. 把二叉搜索树转换为累加树538. 把二叉搜索树转换为累加树题目介绍给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。提醒一下,二叉搜索树满足下列约束条件:节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。左右子树也必须是二叉搜索树。注意:本题和 1038: https://leetcode cn.com/problems/binary search tree to greater sum tree/ 相同示例 1:输入:[4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]输出:[30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]示例 2: 输入:root = [0,null,1] 输出:[1,null,1]思路说实话力扣这个题目描述太笼统了,不太能看清除,代码收获