尋找乙個數(基本的二分搜尋)
因為我們初始化 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緊挨在一起,...