题目来源于知识星球—英雄算法联盟,五月算法集训专题
目录
前言
跟随英雄算法联盟博主—英雄哪里出来,每天完成相应的算法练习,一个月后,必定会有所成长!
一、1480.一维数组的动态和(简单)
1.题目描述

2.解题思路
由题意可知,在返回的数组当中,第一个元素的值为原数组的第一个数的值,第二个元素的值为原数组的前两个数的和,第三个元素的值为原数组的前三个数的和,以此类推。因此,我们进行双层遍历来求解。
3.代码演示(C++)
class Solution
{
public:
vector<int> runningSum(vector<int>& nums)
{
int n=nums.size();
vector<int>ans(n);
for(int i=0;i<n;i++)
{
for(int j=0;j<=i;j++)
{
ans[i]+=nums[j];
}
}
return ans;
}
};
4.题目链接
二、1588.所有奇数长度子数组的和(简单)
1.题目描述

2.解题思路
两个相邻的奇数的间隔为2,我们从长度为1开始遍历整个数组,起始下标为0,终止
下标为数组长度或数组长度-1,最后将符合条件的元素累加在一起返回结果。
3.代码演示(C++)
class Solution
{
public:
int sumOddLengthSubarrays(vector<int>& arr)
{
int sum=0;
int n=arr.size();
for(int start=0;start<n;start++)
{
for(int length=1;length+start<=n;length+=2)
{
int end=start+length-1;
for(int i=start;i<=end;i++)
{
sum+=arr[i];
}
}
}
return sum;
}
};
4.题目链接
三、1442.形成两个异或相等数组的三元组数目(中等)
1.题目描述

2.解题思路
主要还是公式的推导。第(i+1)个异或的结果为前i个异或的结果再异或上第i个数,
之后用三层循环来判断两个结果是否相等。
3.代码演示(C++)
class Solution
{
public:
int countTriplets(vector<int>& arr)
{
int ans=0;
int n=arr.size();
vector<int>nums(n+1);
for(int i=0;i<n;i++)
{
nums[i+1]=nums[i]^arr[i];
}
for(int i=0;i<arr.size();i++)
{
for(int j=i+1;j<arr.size();j++)
{
for(int k=j;k<arr.size();k++)
{
if(nums[i]==nums[k+1])
{
ans++;
}
}
}
}
return ans;
}
};
4.题目链接
四、1094.拼车(中等)
1.题目描述

2.解题思路
代码来源于LeetCode官方题解,后续仍需加强理解与学习。
3.代码演示(C++)
class Solution
{
public:
bool carPooling(vector<vector<int>>& trips, int capacity)
{
vector<int> d(1002);
for(auto &e: trips)
{
d[e[1]] += e[0];
d[e[2]] -= e[0];
}
for(int i = 0; i <= 1000; i ++ )
{
if(i) d[i] += d[i - 1];
if(d[i] > capacity) return false;
}
return true;
}
};
4.题目链接
总结
每天跟随英雄哥学习相关的算法,一个月会收获很多,如果你想了解更多关于知识星球的内容,欢迎联系我!
本文介绍了四个算法问题的解题思路和C++代码实现,包括一维数组的动态和、所有奇数长度子数组的和、形成两个异或相等数组的三元组数目以及拼车问题。通过每日算法练习,提升编程能力。
249

被折叠的 条评论
为什么被折叠?



