聚焦算法题实战,系统讲解三大核心板块:“精准定位最优解”——优选算法,“简化逻辑表达,系统性探索与剪枝优化”——递归与回溯,“以局部最优换全局高效”——贪心算法,讲解思路与代码实现,帮助大家快速提升代码能力
二分查找专题

题目链接:
题目描述:

题目示例:

这里暴力解法大家自己实现一下,我就不实现了
分析峰顶位置的数据特点,以及山峰两旁的数据的特点:
由此我们可以分为以下两种情况:
class Solution {
public:
int peakIndexInMountainArray(vector<int>& arr) {
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;
}
};题目链接:
题目描述:

题目示例:

判断二段性:任取一个点 i,与下一个点 i+1,会有如下两种情况:
点睛之笔:如果我们找到了二段性,就可以尝试用二分法解题了!
class Solution {
public:
int findPeakElement(vector<int>& nums) {
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;
}
};