二分查詢的前提條件是序列是有序的!!時間複雜度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...