若干陣列查詢問題及相關高效演算法(未完待續)

2021-08-01 21:45:36 字數 975 閱讀 5872

例子:在陣列 [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...