其實大家第乙個想法就是找到最大值最小值,這兩個肯定是最大值。
切成的兩個陣列裡面,這兩個裡面最大值肯定能在乙個陣列裡面,那麼另外乙個肯定在另外乙個陣列麼?這個陣列裡面的最大值都是一樣的,都是最小值麼?
這個肯定不是的,這樣一刀切的時候並不能報告資料旁邊的大小是什麼。
如果int arr = ;或者int arr = ;
最小值在最左邊或者在最右邊的時候,我們拿到的可能就是我們最好的結果,但是現實情況中,並不一定會出現這種情況的。
大家可以使用陣列,把我們的目標陣列進行轉化-》,這樣看我們是不是就可以看出來一些端倪了,當然這個是我們最理想的情況,那麼我們換乙個不是最理想的情況-》,這樣從乙個或者第二個切的時候就是最大的了。
這種是我們從左表開始統計的,那麼如果陣列變成了,轉化完了是不是就是,這個是不是我們想要的呢,一看其實就不是,這裡我們轉化的時候,如果是從右開始轉化呢,就可以轉化成,這個是不是就是我們想要的了。
通過上面的兩次轉化,我們是不是需要判斷乙個問題,就是我們的陣列裡面是0上的陣列大,還是n-1的位置數字大,剩下的就不用過說了,通過上面的轉化就可以了。
當然這麼轉化,在資料結構裡面其實是占用空間了,那麼有沒有不用占用空間的好辦法呢?
直接找到0和n-1裡面的最小值,這個值是乙個陣列,剩下的單獨乙個陣列,這個辦法是不是更好一些呢。
其實想寫這個部落格的原因就是因為這個面試題,我乙個同事經常性的會給我發一些大場面是給我,正好上次我看到了這個題(某次的美團二面面試題),當時我第一眼並沒有什麼好的辦法,但是這個題一直存在我們的腦袋裡面,想著要不要把這個分享給大家。
這個看起來是不是和上面的那個題差不多,但是解題的思路,並不是跟上面的一樣。
如果大家遇到的是那種算到最後,兩邊的陣列都是一樣的值,其實就好一些。比如,這樣的資料就比較好了一面是,領外一面是,這樣兩邊是不是就是一樣的了,兩邊和都是10,相差是0,肯定是滿足我們的。但是這種肯定是不一定存在的,所以我們在解題的時候不能用這種資料來做的。
其實這個題,大家要是理解面試官要的東西,大家在解題的時候就好解多了,大家想一下相差最少,是不是就相當於距離整體陣列和除以2的值也是最小的呢?順著這個思路,剩下的其實就好說了,大家可以直接排序,然後乙個乙個去疊加,還可以不用排期,直接疊加去比較。
這個水王數的問題,看著也是有些相似的,就放到這裡了。
最簡單粗暴的辦法就是直接遍歷,算出來對應的陣列裡面最多的數是多少,是不是超過一半就可以了。
但是這個肯定不是面試官想要的,這個時候我們就需要想想怎麼才能得到這個資料呢?
首先先明確一點,這裡出現的次數是必須大於n/2的,等於都不行的,所以這裡肯定是有一半的數字都是乙個。
那麼我們是不是可以使用刪除的策略,每次刪除兩個不一樣的資料,直到我們不能再刪除的時候就是水王數了。
看起來是不是很簡單,但是還是存在問題的,如果陣列是,這個時候刪除兩組陣列後是不是還留下來乙個,那麼留下來的這個也不是水王數。大家是不是在想,是不是可以在刪除之前判斷是否有水王數,當然可以,但是你都判斷完了,還刪除做什麼呢?
這裡可以定義兩個值,乙個是目標值,乙個是目標值的血量,分為幾種情況,
如果目標值沒有值,或者目標值與當前值一樣,那麼就把當前值給目標值,血量+1
如果目標值與當前值不一樣,血量-1
如果血量是0的時候,那麼目標值也就沒有值了
這樣直接算到最後的時候剩下在目標值裡面的,是不是就是我們的水王數了。
資料結構與演算法面試題
1。計算二叉樹的深度 獲取最大深度 public static intgetmaxdepth treenode root 2。折半查詢 非遞迴 package althorgrim 1 必須採用順序儲存結果 2 關鍵字必須有序 author hanrk 2734 public class testb...
資料結構 面試題
python實現 寫個大概,import re def quick sort alist,first,last if first last return mid value alist first low first high last while low high while low mid va...
資料結構 面試題
2.棧2.2使用棧計算字尾表示式 2.3對棧的元素進行排序 2.4判斷表示式是否括號平衡 3.佇列 4.鍊錶 5.樹6.圖 7.字典樹 這是一種高效的樹形結構,但值得單獨說明 8.雜湊表 雜湊表 1.1 尋找陣列中第二小的元素 思路 公升序排序之後,輸出第二個數字 1.2 找到陣列中第乙個不重複出現...