目录
1.搜索插入位置
算法原理
代码编写
2.x 的平方根
算法原理
代码编写
3.山脉数组的峰顶索引
算法原理
1.搜索插入位置
算法原理
判断二段性
可以将区间分于5和大于等于5的两个区间,可以使用二分查找搜索左区间的模板。
代码编写
int searchInsert(vector<int>& nums, int target) { 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; } } if(target > nums[nums.size()-1])//如果是数组的末尾返回下一个位置 { return nums.size(); } return right; }
2.x 的平方根
算法原理
根据题意小数部分将被舍去
可以将区间分为,小于等于x和大于x的两段区间,可以使用查找左区间的模板。
代码编写
int mySqrt(int x) { long long left = 0,right = x; while(left < right) { long long mid = left + (right - left + 1)/2; if(mid * mid <= x) { left = mid; } else { right = mid -1; } } return left; }
3.山脉数组的峰顶索引
算法原理
可以将区间分为,小于等于山顶和大于山顶的两段区间,可以使用查找右区间的模板
class Solution {
public:
int peakIndexInMountainArray(vector<int>& arr) {
int left = 0,right = arr.size()-1;
while(left < right)
{
int mid = left + (right-left)/2;
if(arr[mid] < arr[mid+1])
{
left = mid+1;
}
else
{
right = mid;
}
}
return left;
}
};