1、算法目标:
题目描述
设数组a是有n个元素的整数数组,如何从中找出最大和子序列的和?
输入
第一行输入n
第二行输入n个数
输出
输出最大和子序列的和
样例输入
4
2 -1 3 -4
样例输出
4
2、算法实现:
            
            
              csharp
              
              
            
          
          using System;
class Program
{
    static void Main()
    {
        // 读取输入
        int n = int.Parse(Console.ReadLine());
        string[] input = Console.ReadLine().Split();
        int[] array = new int[n];
        
        for (int i = 0; i < n; i++)
        {
            array[i] = int.Parse(input[i]);
        }
        // 使用 Kadane 算法找到最大和子序列
        int maxSoFar = int.MinValue;
        int maxEndingHere = 0;
        for (int i = 0; i < n; i++)
        {
            maxEndingHere += array[i];
            if (maxSoFar < maxEndingHere)
            {
                maxSoFar = maxEndingHere;
            }
            if (maxEndingHere < 0)
            {
                maxEndingHere = 0;
            }
        }
        // 输出结果
        Console.WriteLine(maxSoFar);
    }
}3、代码解释
读取输入:
第一行读取数组的长度 n。
第二行读取 n 个整数,并将其存储在数组 array 中。
初始化变量:
maxSoFar 用于存储到目前为止找到的最大和,初始值为 int.MinValue,表示最小的整数。
maxEndingHere 用于存储当前子序列的和,初始值为 0。
遍历数组:
对于每个元素,将其加到 maxEndingHere 上。
如果 maxEndingHere 大于 maxSoFar,则更新 maxSoFar。
如果 maxEndingHere 小于 0,则重置 maxEndingHere 为 0,因为负数会降低后续子序列的和。
输出结果:
最后输出 maxSoFar,即最大和子序列的和。
样例输入输出
对于样例输入:
            
            
              csharp
              
              
            
          
          4
2 -1 3 -4程序的输出:
            
            
              csharp
              
              
            
          
          4这是因为最大和子序列是 [2, -1, 3],其和为 4。