在乙個陣列中,每乙個數左邊比當前數小的數累加起來,叫做這個陣列的小和。求乙個陣列的小和。這個例子總是看不明白,為什麼呢?因為分治思想在這裡體現的時候,會誤導新手;這個例子很巧的,分治之後,都是左邊小於右邊的,如圖:例子 [1,3,4,2,5]
1左邊比1小的數:沒有
3左邊比3小的數:1
4左邊比4小的數:1,3
2左邊比2小的數:1
5左邊比5小的數:1,3,4,2
所以小和為1+1+3+1+1+3+4+2=16
說巧不巧,人家就是有順序的!,左邊從小到大,右邊從小到大,都是先天的有序!1<3<4,2<5。所以為了更好的理解這個分治的思想,我們換個例子,把例子修改一下,變成這樣:
在乙個陣列中,每乙個數左邊比當前數小的數累加起來,叫做這個陣列的小和。求乙個陣列的小和。現在我們開始來用分治的思想來做這個題,就變成了這個樣子:例子 [4,3,1,5,2]
4左邊比4小的數:沒有
3左邊比3小的數:沒有
1左邊比1小的數:沒有
5左邊比5小的數:4,3,1
2左邊比2小的數:1
所以小和為4+3+1+1=9
這個修改的例子裡面,就能體現出來,每一次的比對,結果都利用上了;4和3比較,沒有人比4小,但是我們得到了大小資訊,把順序儲存在help裡面,4,3和1比較,同樣沒有人比1小,但是,比較 的資訊我們儲存在了help裡面…
結果:public
class
main
; system.out.
println
("sum is : "
+smallsum
(arr));
}public
static
intsmallsum
(int
arr)
return
mergesort
(arr,
0, arr.length -1)
;}public
static
intmergesort
(int
arr,
int l,
int r)
int mid = l +
((r - l)
>>1)
;return
mergesort
(arr, l, mid)
+mergesort
(arr, mid +
1, r)
+merge
(arr, l, mid, r);}
public
static
intmerge
(int
arr,
int l,
int m,
int r)
while
(p1 <= m)
while
(p2 <= r)
for(i =
0; i < help.length; i++
) system.out.
println
("help end !");
return res;
}}
文字的乙個小例子
自然語言文字預處理 導入庫 import pandas as pd import jieba 結巴分詞 from sklearn.feature extraction.text import tfidfvectorizer 基於tf idf的詞頻轉向量庫 分詞函式 def jieba cut str...
搜尋初步 乙個小例子
本篇部落格主要以乙個小例子來初步探索一下 搜尋 包括程式的邏輯結構設計 例 在美元中,硬幣是有名字的,它有一些英文單詞去對應的硬幣的面值,比如1分錢叫做penny,5分錢叫做nichel.有乙個數字對應乙個英文單詞 如果要編寫乙個程式做搜尋,使用者輸入乙個數字 面額 程式輸出對應的英文,那麼如何實現...
ViewPager的乙個小例子
早就聽說有這個viewpager控制項,專案要中使用的也多,viewpager也是更新到了viewpager2。但是我一直沒有使用過,現在記錄一下簡單的使用方法。它的使用和recycleview listview的使用大同小異。也需要介面卡和監聽事件。相信用過這些控制項的同學一定不陌生。上 acti...