例如-如果给定数组是:-int[]arr={1,4,8,3};
结果Subarray应该是:
1 ,
1 ,4 ,
1 ,4 ,8 ,
1 ,4 ,8 ,3 ,
4 ,
4 ,8 ,
4 ,8 ,3 ,
8 ,
8 ,3 ,
3 ,
并且,每个子阵列的最大值为:-1,4,8,8,4,8,8,3,因此所有最大值之和应为:-1 4 8 8 4 8 8 8 8=3=60
要编写Subarray,我可以使用循环来做到这一点:-
{
for(int j = i ; j <= n ; j++)
{
for(int k = i ; k < j ; k++)
{
Console.Write(arr[k] + " ," );
}
Console.WriteLine(" " );
}
}
}
在此之后,我试图在字典数据结构中存储最大值,但无法找到确切使用字典结构的位置以及如何使用Math.max语句。
IDictionary<int, int> maxValue = new Dictionary<int, int>();
如果你只需要求和,那么它可以用O(n)来求解。因为需要打印子数组,所以这是不可能的。但这也让它变得非常简单(我不知道C#,用您需要的内容替换打印):
int total = 0;
for (int start = 0; start < n; start++) {
for (int end = start + 1; end <= n; end++) {
int max = arr[start];
print(arr[start]);
for (int i = start + 1; i < end; i++) {
print(", " + arr[i]);
if (arr[i] > max)
max = arr[i];
}
total += max;
print("\n");
}
print("\n");
}
print(total); // or whatever you want to do with it
这避免了最后一个逗号,但如果需要,可以将其切换回原来的位置。可读的变量名也很有用。
end
不包括在内,我更喜欢这样,因为这样您就可以使用end-start
获得子数组的长度。E、 Java的子字符串的工作原理完全相同。
给定一个数组,编写一个程序以在大小的所有子数组中找到最大 gcd 我的代码: 它是O(N^2),还能再优化吗?
最大乘积子数组给定一个数组包含正整数和负整数,求最大乘积的子数组。例子: 但不能破题找到子数组。
求给定数组的连续子集的最大可能差之和。 我们得到一个由n个非负整数(允许重复元素)组成的数组arr[],求出给定数组中相邻子集的最大差之和。 假设max(s)表示任何子集's'中的最大值,而min(s)表示集合's'中的最小值。我们需要为所有可能的子集找到max(s)-min(s)的总和。 解释: 约束条件: 这是从此处获取的代码,但此代码检查所有可能的子集,而不是连续的子集: 那么如何只得到连续
我一直在练习算法问题,我遇到了这个问题。 给定一个数组(+VE和-VE),我必须找到一个连续的子数组,这样,和可以被任意数K整除,并且该子数组可能是最大和。对于 和,可被k整除的最大和子数组是 ,目前我所能想到的是,每个元素都有两种可能,要么包含在目标子数组中,要么不包含在目标子数组中。但这将是一个指数算法。 编辑:是否有可能在线性时间内解决这个问题。请帮忙