- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
有人告诉我这可以在 O(n) 内完成 - 时间和 O(n) 内存使用。
作为输入,我收到一个 intigers 列表(数量为 n - 从一开始就可用)。
任务是找到最低索引(从左侧开始),使我能够遍历数组(从起始索引到起始元素后面的索引做一个圆圈),以便变量总和 - 即总结所有元素的方式永远不会低于 0。
*此数组中所有元素的总和始终为 0。
例如:1, -1, -3, 3, 4, -4
很好,因为 7 > 0, 3 > 0, 4 > 0, 3 > 0, 0=0 :)
我现在这样做的方式是进入 for 循环 n 次,在里面我有两个 for 循环:一个用于 i->end 索引,另一个用于 0->i-1 索引。
这可行,但速度太慢,任何想法都值得赞赏。(所有基于语言的程序性能改进是不够的)
最佳答案
Let the sequence be a(1),a(2),...,a(N) . Define s_a(i) = a(1)+a(2)+...+a(i). It is given that s_a(N)≥0 (assumption). Let j be the largest index such that s_a(j)<0 if such a j exists. Obviously, j < N . Consider the sequence a(j+1),a(j+2),...,a(N). It is easy to see that all prefix sums of this sequence are ≥0. If a(j+1)+a(j+2)+...+a(k) were less than 0, s_a(k) would have been less than 0 as well, a contradiction.
Now generate a new sequence {bi} = a(j+1),a(j+2),...,a(N),a(1),a(2),...,a(j). It is easy to see that the prefix sums of this new sequence (call it s_b(i)) do not attain a value less than zero for the first N-j elements. Also, since s_b(N-j)≥0, Had s_a(i) been nonnegative, s_b(i+N-j) would be as well.
Keep repeating the process of taking the section after the rightmost position with a negative prefix sum and bringing it to the beginning of the sequence. At each step, the starting range in which we are assured that the prefix sums will be nonnegative keeps increasing. But this number is bounded by N, the length of the sequence. This means that after some steps, there will be no negative prefix sum in the sequence. Thus we have obtained a rotation of the original sequence with all prefix sums nonnegative.
这是我的想法的简单 O(n) 实现。
int best_index(std::vector<int> & a){
int n = A.size();
long long array_sum=0;
long long sum=0;
int last_index=-1;
for (int i = 0; i < n; ++i)
{
array_sum+=a[i];
if (sum<0)
{
sum=0;
if (a[i]>=0)
{
last_index=i;
}
}
sum+=a[i];
}
if (array_sum<0)
{
return -1;
}
return last_index;
}
复杂度:O(n)
关于算法 - 找到数组的起始索引,使元素之和保持 >= 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39872536/
这个问题可能类似于In Angular2 *ngFor iteration, how do I output only unique values from the array?但我的问题是还有更多功
我编写了一个算法来获取 float 的总和,该算法对于整数来说非常有效,但是当我应用于 float 时,我得到的总和是负数。但是我的 float 数组只有正 float 。在这里我发布我的代码,感谢您
我想将这个简单的 for 循环转换为并行循环。它遍历字符串数组(从文本文件读取的 float )并计算总和。 for (int i = 0; i { float tmp; if (f
我正在尝试总结日期差异,一切都很好,除了如果有相同日期我想添加 1,例如,如果起始日期是:01/01/2003到目前为止是 01/01/2003 那么我想添加 1 天,但它没有添加 1 天,而是仅在
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: Is JavaScript’s Floating-Point Math Broken? 这将是一个非常基本的计算机科
我刚接触sql,卡住了。我正在尝试计算每个用户走过的(每年)距离总和。我有一个具有以下结构的表(我们称之为 dist_table): rowid user_name date
我刚接触sql,卡住了。我正在尝试计算每个用户走过的(每年)距离总和。我有一个具有以下结构的表(我们称之为 dist_table): rowid user_name date
给定一个正数数组。我想将数组拆分为 2 个不同的子集,以使它们的 gcd(最大公约数)之和最大。 示例数组:{6,7,6,7}。 答案:需要的两个子集是:{6,6}和{7,7};它们各自的 gcd(s
我想在我的数组中求和:
我想将下面的字符串拆分为字母和数字,然后我需要计算数字的总和。我的示例问题是 a[20]={"abcd123dc2"}; 预期输出: abcddc 8 我的代码: int main() { c
为什么 sizeof 运算符返回的结构大小大于该结构成员的总大小? 最佳答案 这是因为添加了填充以满足对齐约束。 Data structure alignment影响程序的性能和正确性: 未对齐的访问
为什么 sizeof 运算符返回的结构大小大于该结构成员的总大小? 最佳答案 这是因为添加了填充以满足对齐约束。 Data structure alignment影响程序的性能和正确性: 未对齐的访问
为什么 sizeof 运算符返回的结构大小大于该结构成员的总大小? 最佳答案 这是因为添加了填充以满足对齐约束。 Data structure alignment影响程序的性能和正确性: 未对齐的访问
为什么 sizeof 运算符返回的结构大小大于该结构成员的总大小? 最佳答案 这是因为添加了填充以满足对齐约束。 Data structure alignment影响程序的性能和正确性: 未对齐的访问
为什么 sizeof 运算符返回的结构大小大于该结构成员的总大小? 最佳答案 这是因为添加了填充以满足对齐约束。 Data structure alignment影响程序的性能和正确性: 未对齐的访问
为什么 sizeof 运算符返回的结构大小大于该结构成员的总大小? 最佳答案 这是因为添加了填充以满足对齐约束。 Data structure alignment影响程序的性能和正确性: 未对齐的访问
为什么 sizeof 运算符返回的结构大小大于该结构成员的总大小? 最佳答案 这是因为添加了填充以满足对齐约束。 Data structure alignment影响程序的性能和正确性: 未对齐的访问
为什么 sizeof 运算符返回的结构大小大于该结构成员的总大小? 最佳答案 这是因为添加了填充以满足对齐约束。 Data structure alignment影响程序的性能和正确性: 未对齐的访问
为什么 sizeof 运算符返回的结构大小大于该结构成员的总大小? 最佳答案 这是因为添加了填充以满足对齐约束。 Data structure alignment影响程序的性能和正确性: 未对齐的访问
为什么 sizeof 运算符返回的结构大小大于该结构成员的总大小? 最佳答案 这是因为添加了填充以满足对齐约束。 Data structure alignment影响程序的性能和正确性: 未对齐的访问
我是一名优秀的程序员,十分优秀!