1. 程式人生 > 其它 >最大子列和——Maximum Subsequence Sum(Swift)

最大子列和——Maximum Subsequence Sum(Swift)

Given a sequence ofKintegers {N1​​,N2​​, ...,NK​​}. A continuous subsequence is defined to be {Ni​​,Ni+1​​, ...,Nj​​} where1. The Maximum Subsequence is the continuous subsequence which has the largest sum of its elements. For example, given sequence { -2, 11, -4, 13, -5, -2 }, its maximum subsequence is { 11, -4, 13 } with the largest sum being 20.

Now you are supposed to find the largest sum, together with the first and the last numbers of the maximum subsequence.

Input Specification:

Each input file contains one test case. Each case occupies two lines. The first line contains a positive integerK(≤). The second line containsKnumbers, separated by a space.

Output Specification:

For each test case, output in one line the largest sum, together with the first and the last numbers of the maximum subsequence. The numbers must be separated by one space, but there must be no extra space at the end of a line. In case that the maximum subsequence is not unique, output the one with the smallest indicesiandj(as shown by the sample case). If all theKnumbers are negative, then its maximum sum is defined to be 0, and you are supposed to output the first and the last numbers of the whole sequence.

Sample Input:

10
-10 1 2 3 4 -5 -23 3 7 -21

Sample Output:

10 1 4
import Foundation

func fun1(array: [Int], num: Int){
    var This = 0
    var Max = 0
    var arr2 = [Int](repeating: 0, count: num)
    var arr3 = arr2
    var s = 0
    var count = 0
    
    for i in array{
        if i > -1{
            break
        }else{
            count += 1
        }
    }
    
    if count == num{
        print(Max,array.first!,array.last!, separator: " ")
        exit(0)
    }
    //判斷輸入數列是否全為負數
    
    for i in array.indices {
        This += array[i]
        arr2[s] = array[i]
        s += 1
        //開始計運算元列和,同時將最大子列儲存在arr2陣列中
        if(This > Max){
            Max = This
            arr3 = arr2.filter({$0 != 0})
            //arr3儲存arr2過濾掉0的數列
        }
        
        if (This < 0){
            This = 0
            arr2 = [Int](repeating: 0, count: num - i - 1)
            s = 0
        }
    }
    print(Max,arr3.first!,arr3.last!, separator:" ")
}

let n = readLine()
//第一次輸入
let s = Int(n!)!
//轉換解包
var arr: [Int] = [Int](repeating: 0, count: s)
let words = readLine()!.components(separatedBy: NSCharacterSet.whitespaces)
//第二次輸入:讀取以空格為間隔的輸入
arr = words.map {Int($0)!}
//放入陣列
fun1(array: arr, num: s)