第一周拓展题
二分查找
在排序数组中查找元素的第一个和最后一个位置
/*
* @lc app=leetcode.cn id=34 lang=cpp
*
* [34] 在排序数组中查找元素的第一个和最后一个位置
*/
// @lc code=start
class Solution {
public:
int searchleft(vector<int>& nums, int target){
int left = 0, right = nums.size()-1;
while (left <= right)
{
int mid = (left + right) /2 ;
if (nums[mid] < target)
{
left = mid + 1;
}
else if (nums[mid] >= target)
{
right = mid - 1;
}
}
return right;
}
int searchright(vector<int>& nums, int target){
int left = 0, right = nums.size()-1;
while (left <= right)
{
int mid = (left + right)/2;
if (nums[mid] > target)
{
right = mid - 1;
}
else if (nums[mid] <= target)
{
left = mid + 1;
}
}
return left;
}
vector<int> searchRange(vector<int>& nums, int target) {
int leftboard = -1;
int rightboard = -1;
leftboard = searchleft(nums,target);
rightboard = searchright(nums,target);
if (rightboard - leftboard > 1)
{
return {leftboard+1,rightboard-1};
}
return {-1,-1};
}
};
// @lc code=end
搜索插入位置
/*
* @lc app=leetcode.cn id=35 lang=cpp
*
* [35] 搜索插入位置
*/
// @lc code=start
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int left =0,right = nums.size()-1;
while (left <= right)
{
int mid = (right - left)/2 +left;
if (nums[mid] >= target)
{
right = mid - 1;
}else if (nums[mid] < target)
{
left = mid + 1;
}
}
return right+1;
}
};
// @lc code=end
x 的平方根
/*
* @lc app=leetcode.cn id=69 lang=cpp
*
* [69] x 的平方根
*/
// @lc code=start
class Solution {
public:
int mySqrt(int x) {
int left = 0,right = x;
while (left <= right)
{
int mid = (left +right)/2;
int tmp = mid * mid;
if (tmp < x)
{
left = mid + 1;
}else if (tmp > x)
{
right = mid - 1;
}else{
return mid;
}
}
return right;
}
};
// @lc code=end
有效的完全平方数
/*
* @lc app=leetcode.cn id=367 lang=cpp
*
* [367] 有效的完全平方数
*/
// @lc code=start
class Solution {
public:
bool isPerfectSquare(int num) {
int left = 0, right = num;
while (left <= right)
{
int mid = (left + right)/2;
//数组越界的强制类型转换!
double tmp = (double)mid * mid;
if (tmp < num)
{
left = mid + 1;
}else if (tmp > num)
{
right = mid - 1;
}else {
return true;
}
}
return false;
}
};
// @lc code=end
本文介绍了使用二分查找法在排序数组中查找元素的第一个和最后一个位置、搜索插入位置以及计算平方根和判断完全平方数的方法。通过中点比较优化搜索过程,实现高效解决方案。
2258

被折叠的 条评论
为什么被折叠?



