数组中最大和的子数组


    public static void main(String[] args) {
    
        int[] array = { 1, -2, 3, 10, -4, 7, 2, -5 ,6, 8, 9};
        MaxSum(array, 11);
    }
    
    public static void MaxSum(int[] array, int len)
    {
    
        if (null == array || len <= 0) {
            return;
        }
        
        int curSum = 0, maxSum = 0;
        int index_start = 0, index_end = 0; // 初始化子数组最大和下标
        for (int i = 0; i < len; i++) {
            curSum += array[i]; // 累加
            
            if (curSum < 0) { // 当前和小于0,重置为0
                curSum = 0;
                index_start = i + 1; // 调整子数组最大和的开始下标
            }
            
            if (curSum > maxSum) { // 当前和大于最大和,则重置最大和
                maxSum = curSum;
                index_end = i; // 调整子数组最大和的结束下标
            }
        }
        
        if (maxSum == 0) { // 最大和依然为0,说明数组中所有元素都为负值
            maxSum = array[0];
            index_start = index_end = 0; // 初始化子数组最大和下标
            for (int i = 1; i < len; i++) {
                if (array[i] > maxSum) {
                    maxSum = array[i];
                    index_start = index_end = i; // 调整子数组最大和下标
                }
            }
        }
        
        // 输出最大和的子数组及其开始、结束下标
        for (int i = index_start; i <= index_end; i++) {
            System.out.print(array[i] + " ");
        }
        
        System.out.println("maxSum: " + maxSum);
    }

你可能感兴趣的:(数组)