目录
35. 搜索插入位置
解析
题解
852. 山脉数组的峰顶索引
解析
题解
162. 寻找峰值
解析
题解
35. 搜索插入位置
35. 搜索插入位置 - 力扣(LeetCode)
解析
题解
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
// 021_专题三_二分查找算法_搜索插入位置_C++
int left = 0, right = nums.size() - 1;
while (left < right)
{
int mid = left + (right - left) / 2;
if (nums[mid] < target)
left = mid + 1;
else
right = mid; // 没有减法就不需要 mid 的计算就不需要 + 1
}
if (nums[left] < target) return left + 1; // right 也行
return right;
}
};
852. 山脉数组的峰顶索引
852. 山脉数组的峰顶索引 - 力扣(LeetCode)
解析
题解
class Solution {
public:
int peakIndexInMountainArray(vector<int>& arr) {
// 022_专题三_二分查找算法_山脉数组的峰顶索引_C++
int left = 1, right = arr.size() - 2; // 依照题意开头和结尾是不可能的
while (left < right)
{
int mid = left + (right - left + 1) / 2;
if (arr[mid] > arr[mid - 1])
left = mid;
else
right = mid - 1;
}
return left;
}
};
162. 寻找峰值
162. 寻找峰值 - 力扣(LeetCode)
解析
题解
class Solution {
public:
int findPeakElement(vector<int>& nums) {
// 023_专题三_二分查找算法_寻找峰值_C++
int left = 0, right = nums.size() - 1;
while (left < right)
{
int mid = left + (right - left) / 2;
if (nums[mid] > nums[mid + 1])
right = mid;
else
left = mid +1;
}
return left; // 两个都行
}
};