[藍橋杯][演算法提高VIP]和最大子序列 (Java版)
阿新 • • 發佈:2018-12-21
題目:對於一個給定的長度為N的整數序列A,它的“子序列”的定義是:A中非空的一段連續的元素(整數)。你要完成的任務是,在所有可能的子序列中,找到一個子序列,該子序列中所有元素的和是最大的(跟其他所有子序列相比)。程式要求你輸出這個最大值。
我們的校賽選了這道題,一開始我一看題,很高興,發現就是個簡單的模版題,結果提交後瘋狂報re,百度也發現有人說這題的測試資料有問題,終於被我發現哪裡有問題了。
解題思路:
一個簡單的最大欄位和模版題,邊讀入邊判斷,用一個sum來儲存前一段區間的和,如果sum大於max,就把sum賦值給max,max的初值根據題目資料的範圍設定為-10001,如果sum小於0就把sum設為0.思路沒有問題,就是測試資料出錯了。
注意事項:
這道題的測試資料出錯了,Java讀不了這個資料,c語言能讀這種資料,但是Java會報執行時錯誤,特意用字串讀取才發現報的錯誤是什麼,之前直接用sc.nextInt讀取報了輸入字元不匹配
import java.util.Scanner; //Java的測試資料出錯了。。 public class 和最大子序列 { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int sum=0; int max=-10001; int a; for(int i=0;i<n;i++){ a=Integer.parseInt(sc.next()); //特意用字串讀取才發現報的錯誤是什麼,之前直接用sc.nextInt讀取報了輸入字元不匹配 sum+=a; if(sum>max) max=sum; if(sum<0) sum=0; } System.out.println(max); sc.close(); } }