java-最大連續子數組和(最大字段和)


1.題目要求

  給定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。

2.代碼實現

public class MaxArray {
	
	public static void main(String[] args){
		int arr[] = {-2,11,-4,13,-5,-5,-2};
		int result = maxSubArray(arr);
	    System.out.println("最大子段和為:"+result);
	}
	
	public static int maxSubArray(int[] arr){
		int sum = 0;
		int maxsum = 0;
		for(int i = 0; i < arr.length; i ++){
			if(sum <= 0){
				sum = arr[i];
			}else{
				sum += arr[i];
			}
			if(sum > maxsum){
				maxsum = sum;
			}
		}
		return maxsum;
	}
}

代碼已上傳到 GitHub

3單元測試選擇:條件組合覆蓋

3.1覆蓋標准

  使得每個判定中條件的各種可能組合都至少出現一次。

3.2條件選擇的程序流程圖如下

條件組合 執行路徑
sum<=0,sum>=maxsum acdf
sum>0,sum>=maxsum abdf
sum>0,sum< maxsum abdef
sum<=0,sum< maxsum acdef

測試數據只需要一組[5,2,-8,3]即可實現上述四種執行路徑

3.3測試代碼

import static org.junit.Assert.*;
import org.junit.Test;

public class MaxArrayTest {

	@Test
	public void testMaxSubArray() {
		int[]  arr={5,2,-8,3};
		assertEquals(7,MaxArray.maxSubArray(arr));
	}
}

3.4測試結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM