谁能帮我降低以下代码的时间复杂度?
Can anyone help me reduce the time-complexity of the following code?
我是黑客兰克的新手。我总是喜欢编码而不寻求解决方案。通过这样做,我遇到了这个问题,因为我的代码(如下所示(正在获得所需的输出,但对于大型输入,它不会在时间限制内执行。所以任何人都能帮助我降低时间复杂度。还告诉我,编码而不寻找解决方案是好是坏......
long arrayManipulation(int n,int m, vector<vector<int>> q) {
long result=0;
vector<long> arr(n,0);
for(long i=0;i<m;i++)
{
for(long t=q[i][0];t<=q[i][1];t++)
{
arr[t-1]+=q[i][2];
}
}
for(long i=0;i<n;i++)
{
if(result<arr[i])
{result=arr[i];}
}
return result;
}
这七个测试用例未通过
这可以减少:
vector<long> arr(n,0);
for(long i=0;i<m;i++)
{
for(long t=q[i][0];t<=q[i][1];t++)
{
arr[t-1]+=q[i][2];
}
}
像这样:
vector<long> arr(n + 1,0); // n+1 needed because q[i][1] can be n-1
for(long i=0;i<m;i++)
{
arr[q[i][0]] += q[i][2];
arr[q[i][1] + 1] -= q[i][2];
}
long sum = 0;
for(long i=0;i<m;i++) {
sum += arr[i];
arr[i] = sum;
}
这是有效的,因为例如让a := [0, 0, 0, 0, 0]
并且您想为从第 2 个到第 4 个(不包括在内(的初始数组的元素添加 5,然后您可以执行a[1] += 5
,a[3] -= 5
(a
是[0, 5, 0, -5, 0]
(,然后计算a
上的前缀和,这将是您需要添加到初始数组的每个元素的多少(在这种情况下[0, 5, 5, 0, 0]
(。
相关文章:
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- 函数的时间复杂度是多少?
- 计算两个代码块的时间复杂度
- 给定C++代码的时间复杂度是多少?
- 以下递归代码的时间复杂度是多少?
- 此特定代码的时间复杂度是多少?
- 谁能帮我降低以下代码的时间复杂度?
- 以下代码片段的时间复杂度是多少?
- 此代码段的时间复杂度
- 用于搜索的给定代码的时间复杂度是多少
- 如何降低以下代码块的时间复杂度
- 给定代码的时间复杂度
- 这个代码(来自leetcode)的时间复杂度是多少
- &&运算符的 C++ 代码时间复杂度
- 以下代码的时间复杂度是多少
- 什么是"渐近紧时间复杂度"?此代码的时间复杂度是否渐近紧张?
- 优化的c++代码,时间复杂度为O(n2),空间复杂度为0(1),用于后续输入
- 下面代码的时间复杂度