問題: 給定n個整數(可能爲負數)組成的序列a[1],a[2],a[3],…,a[n],求該序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。當所給的整數均爲負數時定義子段和爲0,依此定義,所求的最優值爲: Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j<=n
例如,當(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)時,最大子段和爲20。
– 引用自《百度百科》git
public Integer greedySum() { int sum=num.get(0),max=num.get(0); for (int i=1;i<num.size();i++) { sum+=num.get(i); if (sum<num.get(i)) { sum=num.get(i); } if(sum>max) { max=sum; } } return max; }
運用了貪心算法,若以前所求和比如今訪問的數組元素小則將此元素的值賦予和算法
public static ArrayList<Integer> scanSelf() { Scanner sc=new Scanner(System.in); ArrayList<Integer> num=new ArrayList<>(); String str1=sc.nextLine(); String[] str2=str1.split(" "); for (int i=0; i<str2.length; i++) { num.add(Integer.valueOf(str2[i])); } sc.close(); return num; }
除去已預訂測試樣例,還可自行鍵入測試數據數組