C# 求数组中连续随机数的最大和
我有一个25个介于-100和100之间的随机整数数组 例如,我的阵列可以如下所示: -10、23、19、11、3、9、8、4、10、20、30、40、50、6、2、1、9、8、6、20、21、3、2、4、7 我希望编写一个方法,将数组作为参数接收,并打印出以下内容:第一个索引、最后一个索引以及它们之间连续元素的总和,这将给出可能的最大总和 对于我的示例,输出将是:第一个索引:1(值:23),最后一个索引:19(值:20),总和:177 我不知道该如何处理这个问题。我写了一个代码,但它非常复杂,效率低下,因为我使用了一个列表来存储所有可能的总和。C# 求数组中连续随机数的最大和,c#,algorithm,time-complexity,C#,Algorithm,Time Complexity,我有一个25个介于-100和100之间的随机整数数组 例如,我的阵列可以如下所示: -10、23、19、11、3、9、8、4、10、20、30、40、50、6、2、1、9、8、6、20、21、3、2、4、7 我希望编写一个方法,将数组作为参数接收,并打印出以下内容:第一个索引、最后一个索引以及它们之间连续元素的总和,这将给出可能的最大总和 对于我的示例,输出将是:第一个索引:1(值:23),最后一个索引:19(值:20),总和:177 我不知道该如何处理这个问题。我写了一个代码,但它非常复杂,效
您能为这个问题显示一个伪代码,或者用c#表示代码吗 这是文献中一个众所周知的问题,在许多其他名称中称为最大子阵列问题。 您可以在此处找到更多信息和带有可能解决方案的伪代码: 因为您的问题似乎是找到一个可行的算法而不是实现它,所以下面的伪代码就足够了:
def max_subarray(A):
max_ending_here = max_so_far = 0
for x in A:
max_ending_here = max(0, max_ending_here + x)
max_so_far = max(max_so_far, max_ending_here)
return max_so_far
你不需要保留所有可能的总数,因为你只对最大的数感兴趣 循环遍历这些组合,并寻找任何大于您目前拥有的总和 您可以利用这样一个事实,即任何范围的元素之和都是不包括最后一项加上最后一项的元素之和。也就是说,您不需要通过元素循环来计算每个可能的和,因为您已经有了范围的和,即少了一个元素:
public static void ShowLargestSum(int[] arr) {
int largest = arr[0], start = 0, end = 0;
for (int i = 0; i < arr.Length; i++) {
int sum = 0;
for (int j = i; j < arr.Length; j++) {
sum += arr[j];
if (sum > largest) {
largest = sum;
start = i;
end = j;
}
}
}
Console.WriteLine("first index: {0} (value: {1}), last index: {2} (value:{3}), total sum: {4}", start, arr[start], end, arr[end], largest);
}
public static void showlatestsum(int[]arr){
int最大=arr[0],开始=0,结束=0;
对于(int i=0;i最大值){
最大=总和;
开始=i;
end=j;
}
}
}
WriteLine(“第一个索引:{0}(值:{1}),最后一个索引:{2}(值:{3}),总和:{4}”,开始,arr[start],结束,arr[end],最大);
}
示例阵列在我的计算机上的执行时间:0.17毫秒。我没有看到任何代码