演算法 二分查詢及其變種

2021-09-26 10:21:37 字數 1797 閱讀 5560

二分查詢的前提條件是序列是有序的!!時間複雜度log(n).需要注意的幾個地方:

public

intfindtarget

(int

nums)

else

}return-1

;//沒找到 ,返回-1

}

需要注意的地方:

public

intfindtargetleft

(int

nums)

else

}return l;

//}

同樣如果要找出現的最右位置
public

intfindtargetleft

(int

nums)

else

}return h;

//}

給定乙個有序的字元陣列 letters 和乙個字元 target,要求找出 letters 中大於 target 的最小字元,如果找不到就返回第 1 個字元。

input:

letters = [「c」, 「f」, 「j」]

target = 「d」

output: 「f」

input:

letters = [「c」, 「f」, 「j」]

target = 「k」

output: 「c」

public

char

nextgreatestletter

(char

letters,

char target)

else

}return l < n ? letters[l]

: letters[0]

;}

public

intsinglenonduplicate

(int

nums)

if(nums[m]

== nums[m +1]

)else

}return nums[l]

;}

題目描述:給定乙個元素 n 代表有 [1, 2, …, n] 版本,在第 x 位置開始出現錯誤版本,導致後面的版本都錯誤。可以呼叫 isbadversion(int x) 知道某個版本是否錯誤,要求找到第乙個錯誤的版本。

//即 在[true,true,true,false,false,false,..]陣列裡面尋找false的最左下標

public

intfirstbadversion

(int n)

else

}return l;

}

input: [3,4,5,1,2],

output: 1

// 即 尋找最小數的最左下標

public

intfindmin

(int

nums)

else

}return nums[l]

;//attention

}

同理,如果要尋找旋轉最大數字,則變成了尋找最右下標
public

intfindmin

(int

nums)

else

}return nums[h]

;}

二分查詢演算法及其變種

前言 二分查詢演算法也稱為折半查詢演算法,是一種在查詢演算法中普遍使用的演算法。其演算法的基本思想是 在有序表中,取中間的記錄作為比較關鍵字,若給定值與中間記錄的關鍵字相等,則查詢成功 若給定的值小於中間記錄的關鍵字,則在中間記錄的左半區間繼續查詢 若給定值大於中間記錄的關鍵字,則在中間記錄的右半區...

二分查詢演算法及其變種

前言 二分查詢演算法也稱為折半查詢演算法,是一種在查詢演算法中普遍使用的演算法。其演算法的基本思想是 在有序表中,取中間的記錄作為比較關鍵字,若給定值與中間記錄的關鍵字相等,則查詢成功 若給定的值小於中間記錄的關鍵字,則在中間記錄的左半區間繼續查詢 若給定值大於中間記錄的關鍵字,則在中間記錄的右半區...

二分查詢及其變種

返回帶查詢元素key的下標。若沒有key元素,則返回 1。注意 1 while迴圈的條件是low high 2 每次迭代hi mid 1 或lo mid 1 二分查詢,找到該值在陣列中的下標,否則為 1 static int binaryserach int array,int key else i...