順序表:最多水的容器
阿新 • • 發佈:2020-12-31
給定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; }