我正试图找到最小和邻接子数组的起始和结束索引。我试了很多次,但还是找不到。为此我使用C++。
求最小和邻接子数组的代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int arr[] = {3, -4, 2, -3, -1, 7, -5};
int n = sizeof(arr) / sizeof(arr[0]);
int min_ending_here = INT_MAX;
int min_so_far = INT_MAX;
for (int i=0; i<n; i++)
{
if (min_ending_here > 0)
min_ending_here = arr[i];
else
min_ending_here += arr[i];
min_so_far = min(min_so_far, min_ending_here);
}
cout<<"minimum sum = "<<min_so_far;
}
假设存在多个子数组,其和值最小,则取起始索引值最小的子数组,我们可以将上述解决方案修改如下:
#include <bits/stdc++.h>
using namespace std;
int main() {
int arr[] = {3, -4, 2, -3, -1, 7, -5};
int n = sizeof(arr) / sizeof(arr[0]);
int min_ending_here = INT_MAX;
int min_so_far = INT_MAX;
int last_idx = 0; // indication of fresh start of contiguous summation
int start_idx; // for holding start index
int end_idx; // for holding end index
for (int i=0; i<n; i++) {
if (min_ending_here > 0) {
min_ending_here = arr[i];
last_idx = i;
}
else {
min_ending_here += arr[i];
}
if (min_so_far > min_ending_here) {
min_so_far = min_ending_here;
start_idx = last_idx;
end_idx = i;
}
}
cout<<"minimum sum = "<<min_so_far<<endl;
cout<<"start index = "<<start_idx<<endl;
cout<<"end index = "<<end_idx<<endl;
}
最大乘积子数组给定一个数组包含正整数和负整数,求最大乘积的子数组。例子: 但不能破题找到子数组。
本文向大家介绍C ++中最小K总和最短的子数组,包括了C ++中最小K总和最短的子数组的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个数组A。我们必须找到A的最短,非空,连续子数组的长度,其总和至少为K。如果没有这样的子数组,则返回-1。 因此,如果输入类似于[5,3,-2,2,1]且k = 6,则输出将为2,如我们所见(5 + 3)> = 6 为了解决这个问题,我们将遵循以下步骤- n:
在长度为N的数组中求和最大的邻接子数组。 输入格式: 输出格式: 返回一个整数,表示相邻子数组的最大可能和。 制约因素: 输入2:A=[-2,1,-3,4,-1,2,1,-5,4] 产出2:6 说明2:子数组[4,-1,2,1]的最大可能和为6。 你能告诉我为什么下面的代码不起作用,代码中的错误是什么吗:
所以,我刚刚进行了一次在线编程评估,给了我两个问题,其中一个是这个连续的子数组和提供了两个复杂的编码问题+8个MCQ,并将在1小时内完成。 这里我将讨论上面提到的子数组的最大邻接和之一。通常,我发现困难的部分是处理负数和连续。我所做的是首先将应用到给定的数组,然后再次按照负值的绝对值排序,就像i的例如,对于给定的随机数组,我在每个i和所有j迭代后都有一个max,如果max 。
我想从数组的一部分找到最大值和最小值。我知道我可以通过复制数组将所需的数组部分复制到另一个数组中,但只是想知道是否可以不复制数组,因为我必须为不同的子数组进行循环 例如: 现在我想从1到4找到子数组的最小/最大值(如果可能,不复制子数组)