leetcode刷題 演算法(4) 二分查詢

2021-10-02 20:58:17 字數 2298 閱讀 5114

尋找乙個數(基本的二分搜尋)

因為我們初始化 right = nums.length - 1

所以決定了我們的「搜尋區間」是 [left, right]

所以決定了 while (left <= right),同時也決定了 left = mid+1 和 right = mid-1

因為我們只需找到乙個 target 的索引即可,所以當 nums[mid] == target 時可以立即返回

int binarysearch(vectornums,int key)

return -1;

}尋找左側邊界的二分搜尋

因為我們初始化 right = nums.length

所以決定了我們的「搜尋區間」是 [left, right)

所以決定了 while (left < right)

同時也決定了 left = mid+1 和 right = mid

因為我們需找到 target 的最左側索引 所以當 nums[mid] == target 時不要立即返回 而要收緊右側邊界以鎖定左側邊界

int binarysearchfirst(vectornums,int key)else

left=mid+1;

}return left;

}尋找右側邊界的二分查詢

因為我們初始化 right = nums.length

所以決定了我們的「搜尋區間」是 [left, right)

所以決定了 while (left < right)

同時也決定了 left = mid+1 和 right = mid

因為我們需找到 target 的最右側索引

所以當 nums[mid] == target 時不要立即返回

而要收緊左側邊界以鎖定右側邊界

又因為收緊左側邊界時必須 left = mid + 1

所以最後無論返回 left 還是 right,必須減一

int binarysearchlast(vectornums,int key)else right=mid;

}return left-1;

}//相當於查詢第乙個》key的下標,然後-1。

二分查詢(2.15)

1. 求開方

一開始未做出,多種解法

※2. 大於給定元素的最小元素

類上,ok

3. 有序陣列的 single element

ok,二分法思考後做出

※4. 第乙個錯誤的版本

ok5. 旋轉陣列的最小數字

一開始未做出

※6. 查詢區間

一次修改後ok

69. sqrt(x) (easy)

二分法:查詢最後乙個數滿足(

mid*mid<=n

),即查詢第乙個數滿足

mid*mid>n

然後-1

class solution 

return left-1;

}};//查詢第乙個》x,然後-1

袖珍計算機演算法:時間複雜度o(1),空間複雜度o(1)

class solution 

return (int)x1;}};

744. find smallest letter greater than target (easy)

類上,查詢第乙個大於給定元素

540. single element in a sorted array (medium)

1.	異或

class solution else return nums[mid];

}return nums[right];}};

278. first bad version (easy)

*找中間數用

intmid=left+(right-left)/2;

153. find minimum in rotated sorted array (medium)

class solution {

public:

int findmin(vector& nums) {

int left=0,right=nums.size()-1;

while(left34. find first and last position of element in sorted array

一次修改後ok

Leetcode演算法刷題筆記 8二分查詢

leetcode 34.在排序陣列中查詢元素的第乙個和最後乙個位置 尾語相關刷題筆記部落格 競賽常用模板整理 acm icpc ccsp leetcode演算法刷題筆記1 鍊錶 leetcode演算法刷題筆記2 棧 隊 堆 leetcode演算法刷題筆記3 遞迴與回溯 leetcode演算法刷題筆記...

LeetCode刷題總結 二分查詢

leetcode 刷題總結 二分查詢 二分主要是形成自己的 風格就可以了。常用兩種風格 現在偏向於風格一實現了 leetcode35.搜尋插入位置 給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。這個實際上就是手動實現lower...

關於二分查詢LeetCode刷題總結(上)

首先來談一下二分查詢的模板問題。一般會出現一下三種錯誤 1 陣列越界。2 死迴圈 3 跳過查詢的元素下標。先來看幾組常見容易出錯的模板。int low 0,high n while low這種情況下,如果在 2,2 中找值為3的下標,那麼每次都會讓low的值等於mid,使low和high緊挨在一起,...