求一維陣列蓄水數

2021-09-24 15:08:53 字數 1603 閱讀 5556

很多程式設計師在面試的時候,都可能遇到一些邏輯思維/程式設計題,這樣的題目非常有意思。而且非常考驗程式設計師的解題技巧和**編寫能力。我這兒就曾經遇到過乙個。

具體需求看圖

1、先找出整個陣列中的最大值。

2、整個陣列就被這個最大值給分成了兩個陣列。

3、左邊陣列,從左往右遍歷,計算每個位置的蓄水數,計算規則是:找到當前位置的左邊蓄水的最大高度,當前位置的蓄水數就等於min(leftmaxheight, maxheight) - currentheight

4、右邊陣列,從右往左遍歷,計算每個位置的蓄水數,計算規則是:找到當前位置的右邊蓄水的最大高度,當前位置的蓄水數就等於min(rightmaxheight, maxheight) - currentheight

5、最終把每個位置上的蓄水數加起來即可

package com.aura.funny.water;

/** * 描述:

* 求出乙個一維陣列的蓄水數。陣列中的每個位置上的值,就是高度,

* 如果某個值的左右兩邊都有比它高的值,那麼這個位置就可以蓄水。

* 蓄水的容量 = max(左邊, 右邊) - 當前位置的值

*/public class waterarray01 ;

int result1 = findtotalwaterstorage(waterarray1);

system.out.println("蓄水總量為:" + result1);

// 能蓄水的位置和值: 0,0,0,3,4,1,4,0,1,2,0,0

int waterarray2 = new int;

int result2 = findtotalwaterstorage(waterarray2);

system.out.println("蓄水總量為:" + result2);

// 能蓄水的位置和值: 0,0,0,3,4,1,4,0,1,2,0,0

int waterarray3 = new int;

int result3 = findtotalwaterstorage(waterarray3);

system.out.println("蓄水總量為:" + result3);

} /**

* 整體思路:

* 先找到最高點,然後分別從左,和 從右 往這個高點遍歷。算出蓄水數

*/private static int findtotalwaterstorage(int waterarray) else

}return totalwater;

}}

這種思路的求解的時間複雜度是:o(n)級別。網上其他的o(n * logn)級別都不可取

大功告成。!!!!

陣列的維數

作為引數或者在二維陣列的宣告時,往往可以省略第一維,但是不可以省略第二維,或者是更高的維數。這是由於編譯器的原理所限制的。a i j a 0 0 i sizeof int n sizeof int 此時 n為二維的維數 由此可以看出在定義二維陣列或更高維陣列時,對其進行初始化可以省略第一維引數,編譯...

C語言入門 一維陣列求素數

note your choice is c ide include stdio.h void main 輸出10位陣列元素,並且進行陣列元素中屬於素數進行判斷,如屬於素數則進行輸出並且統計素數個數,反之不進行輸出 定義變數和陣列正確 int a 10 int i,j,count 0,gs 0 是用來...

一維陣列求楊輝三角

問題 編寫程式,根據輸入的正整數n 1 n 12 輸出相應的楊輝三角圖案,例如,當n 5時,將輸出 11 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 分析 當輸入n的值後,應共輸出n 1行 不計空行 顯然用迴圈結構,輸出行的行號可以是1至n 1,也可是0至n,這無...