⭐简单说两句⭐
✨ 正在努力的小新~
💖 超级爱分享,分享各种有趣干货!
👩💻 提供:模拟面试 | 简历诊断 | 独家简历模板
🌈 感谢关注,关注了你就是我的超级粉丝啦!
🔒 以下内容仅对你可见~作者:后端小知识,CSDN后端领域新星创作者 |阿里云专家博主
CSDN个人主页:后端小知识
🔎GZH:
后端小知识
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
交替子数组计数 - 力扣题解
前言
亲爱的朋友们,好久不见,十分想念
今天参加力扣周赛,做了三个题(自己还是太菜了😞😞😞)
下面我给各位友友们来分享一下周赛的第三题吧,前面两题太简单了,就不分享了哈
题解
题目:交替子数组计数
链接:交替子数组计数
贴心吧,链接和图给安排上了🐮
思路:
题目的意思很明朗,就看怎么做了
如果我们采用直接暴力循环(一个一个模拟子数组)去做的话肯定是会TLE的
那正确的做法是什么呢?
答案就是动态规划
这个方程式还是比较好推演的,很简单,大家看一眼就懂了
我们定义dp[i]:以nums[i] 结尾的交替子数组个数
初始化dp[0]=1,只有一个时,个数肯定是1
如果相邻的两个数不相等的话:dp[i]=dp[i-1]+1;
如果相邻的两个数相等的话:dp[i]=1;
最后求和一下就是总的个数了,是不是超级简单吖
下面就是代码展示啦
AC代码清单
class Solution {
public:
int dp[100010];
long long countAlternatingSubarrays(vector<int>& nums) {
dp[0]=1;
for(int i=1;i<nums.size();i++){
if(nums[i]!=nums[i-1]){
dp[i]=dp[i-1]+1;
}else{
dp[i]=1;
}
}
long long ans=0;
for(auto x:dp) ans+=x;
return ans;
}
};
【都看到这了,点点赞点点关注呗,爱你们】😚😚
💬
✨ 正在努力的小新~
💖 超级爱分享,分享各种有趣干货!
👩💻 提供:模拟面试 | 简历诊断 | 独家简历模板
🌈 感谢关注,关注了你就是我的超级粉丝啦!
🔒 以下内容仅对你可见~
作者:后端小知识,CSDN后端领域新星创作者 | 阿里云专家博主
CSDN个人主页:后端小知识
🔎GZH:后端小知识
🎉欢迎关注🔎点赞👍收藏⭐️留言📝