1. 程式人生 > 其它 >順序表:最多水的容器

順序表:最多水的容器

技術標籤:資料結構C演算法

給定n個非負整數,圖中i表示序號,ai為數值,由數值水平線構成容器中最多的水。

如圖所示,最多可以裝7+6+2+5+4+7+7=48

演算法思想:設一個max儲存最大容量,初試置0,取較大值作為邊界,從後向前遍歷,每次從取左右端點,然後從左從右遍歷,總數累加,如果超過邊界則以邊界作為數值加入總量,每次遍歷完,比較最大總量作為結果暫存,左邊界後移,遍歷結束返回最大值。

int MaxCapacity(ElemType A[] ,int n){
    int left = 0, right , temp ,sum , max = 0;    //設左、右邊界,初值、總和、最大總和
    //左邊界不動,右邊界不斷向前遍歷移動
    for(int j = n-1; j>0; j--){    
    	right = j;  sum = 0;    //每一次總和清空
    	temp = (A[left]>A[right]?A[left]:A[right];    //取左右邊界最大者為參考數值
	    for(int i = left+1;i<right;i++)    //從左邊界開始向右累加數值
	    	if(temp<A[i])                  //中間每個元素比邊界值大,則最多裝入邊界值的資料
	    		sum += temp;
	    	else                            //在邊界值一下則將該位置的數值加入
	    		sum += A[i];
	    	if(sum>max){                    //當前總和與暫存的最大總和比較
	    		max = sum;
	    	left++:                          
        }
    }
    return max;
}