例子:在陣列 [1
,3,4
,6,6
,9,11
] 中查詢
3 的位置
思想:
當陣列不是很大的時候可以逐個檢查,也就是「列舉」,這樣做的時間複雜度是 o(
n),其中
n 為陣列的長度。但當
n過大,例如 n=
108時,這樣做會非常費時。
實際上,我們可以通過乙個簡單的判斷將問題縮小一半。在上面的例子中,我們的目標在區間 a[
1..7
] 中查詢
3 的位置( 1,
7分別代表區間左右端點的陣列下標)。取區間的中間位置,也就是 (1
+7)/
2=4 。考察 a[
4],a
[4]=
6>
3 ,那麼現在我們只要在 a[
1..3
] 中查詢
3 的位置了,因為a[
4..7
]中的元素肯定都比
3 大(因為陣列時有序的)。這樣一來,我們只付出了常數的複雜度,問題的規模就減小以一半,接下來只要像這樣按部就班地將問題的規模逐步縮小,就能馬上找到答案(接著上面的步驟,應當立即考察a[
2],發現a[2
]=3 就是
3 )。例子中的答案就是
2,表示a[
2]=3
。 這樣做的時間複雜度是o(
log2
(n))
(葉子數為
n 的完全二叉樹的高度的數量級),在記憶體足夠大的情況下,n=
1010
次方規模的資料處理起來也綽綽有餘。
**:
在有序陣列中查詢兩個和為定值的數
在陣列中查詢多個和為定值的數
在陣列中查詢出現次數超過一半的數
在陣列中查詢和為定值的區間
在陣列中查詢包含所有數的最小區間
演算法訓練 陣列查詢及替換
演算法訓練 陣列查詢及替換 問題描述 給定某整數陣列和某一整數b。要求刪除陣列中可以被b整除的所有元素,同時將該陣列各元素按從小到大排序。如果陣列元素數值在a到z的ascii之間,替換為對應字母。元素個數不超過100,b在1至100之間。輸入格式 第一行為陣列元素個數和整數b 第二行為陣列各個元素 ...
陣列相關簡單演算法 冒泡,排序和查詢
一 氣泡排序 實現 public static void bubbolesort int arr 二 選擇排序 實現 public static void selectsort int arr 三,二分查詢 折半查詢 二分查詢 陣列一定是有序 分析 a 定義最小索引和最大索引 b 計算中間索引 c ...
MySQL慢查詢配置,及解決相關問題
在實習中,做一些流程開發,是二次開發,每乙個流程開啟都會很慢,因為沒有源 只有class檔案,所以先從資料庫角度看,在mysql中有可以在配置檔案中配置引數,使mysql將一些慢查詢語句列印出來,這功能會很有用。1.在my.ini檔案中配置如下幾個引數 儲存慢查詢的配置 儲存的檔案 log slow...