打印给定数组的所有子数组,然后在每个子数组中存储最大整数以获得所有最大值的总和?

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 的子字符串完全相同。