打印给定数组的所有子数组,然后在每个子数组中存储最大整数以获得所有最大值的总和?
Print all subarray of given array and than store maximum integer in each subarray to get the sum of all maximum's?
例如-如果给定的数组是:-
int[] arr = { 1, 4, 8, 3 };
结果子数组应该是:
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,8,8,3
因此所有最大值的总和应该是:- 1 + 4 +8+8+4+8+8+8+8=3 = 60
要写子数组,我可以用循环来做到这一点:-
{
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)就可以解决。因为您需要打印 sub-arrays 这是不可能的。但它也使它变得非常简单(我不懂 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
得到 sub-array 的长度。例如。 Java 的子字符串完全相同。
例如-如果给定的数组是:- int[] arr = { 1, 4, 8, 3 };
结果子数组应该是:
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,8,8,3 因此所有最大值的总和应该是:- 1 + 4 +8+8+4+8+8+8+8=3 = 60
要写子数组,我可以用循环来做到这一点:-
{
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)就可以解决。因为您需要打印 sub-arrays 这是不可能的。但它也使它变得非常简单(我不懂 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
得到 sub-array 的长度。例如。 Java 的子字符串完全相同。