【Leecode刷题】二分查找:x的平方根、搜索插入位置

简介: 【Leecode刷题】二分查找:x的平方根、搜索插入位置

题目1:69. x的平方根

思路分析:

就是查找,暴力的话就是要注意整形溢出问题,二分的话是要注意二分区间划分的问题。

思路1:暴力枚举

代码实现:

class Solution {
public:
    int mySqrt(int x) {
      if(x==0) return 0;
      for(int i=1;i<=x;i++) //循环条件不能i<x+1哦,因为x+1可能整形溢出
      {
        if((long long )i*i>x) return i-1;
        else if((long long )i*i==x) return i;
      }
      return 0;
    }
};


思路2:二分查找

这跟我们区间右值模板相同:

第一步:划分 -> 二分区间:[平方小于等于x][平方大于x];

第二步:分析:返回值在左区间,所以 left = mid 不需要跳出区间,相对 right就需要 right = mid -1;


代码实现:

class Solution {
public:
    int mySqrt(int x) {
        if(x==0) return 0;
        int left=1,right=x;
        while(left<right)
        {
            long long mid=left+(right-left+1)/2;
            if(mid*mid>x) right=mid-1;
            else left=mid;
        }
        return left;
    }
};


LeetCode链接:69. x的平方根


题目2:35.搜索插入位置

思路分析:

先分析返回位置:如果找到就返回该位置下标,没找到就返回这个值该插入该有序数组的位置。


思路1:二分查找

二分查找:

第一步:划分 - > 二分区间:[小于等于target][大于target];

第二步:分析: 返回值在左区间,左值不变右值变right-1,有-1中点更新就+1 ;

第三步:处理返回值:只有当 target>nums[left],返回 left+1;


代码实现

class Solution {
public:
    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(nums[left]<target) return left+1;
        else return left;
    }
};

LeetCode刷题:35.搜索插入位置


以过客之名,祝你岁岁平安! ~天天开心🎈

相关文章
|
10月前
|
vr&ar
leetcode每日一题 2021/4/7 81. 搜索旋转排序数组 II
leetcode每日一题 2021/4/7 81. 搜索旋转排序数组 II
37 0
|
1月前
|
算法
LeetCode第81题搜索旋转排序数组 II
文章讲解了LeetCode第81题"搜索旋转排序数组 II"的解法,通过二分查找算法并加入去重逻辑来解决在旋转且含有重复元素的数组中搜索特定值的问题。
LeetCode第81题搜索旋转排序数组 II
|
1月前
|
算法
LeetCode第33题搜索旋转排序数组
这篇文章介绍了LeetCode第33题"搜索旋转排序数组"的解题方法,通过使用二分查找法并根据数组的有序性质调整搜索范围,实现了时间复杂度为O(log n)的高效搜索算法。
LeetCode第33题搜索旋转排序数组
|
3月前
|
存储 算法 数据挖掘
LeetCode 题目 81:搜索旋转排序数组 II
LeetCode 题目 81:搜索旋转排序数组 II
|
11月前
|
算法
【算法挨揍日记】day10——704. 二分查找、34. 在排序数组中查找元素的第一个和最后一个位置
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
356 0
|
算法
每日一题——搜索插入位置(二分查找)
每日一题——搜索插入位置(二分查找)
|
算法 索引
【基础算法】浅浅刷个小题 # 搜索插入位置 # 各位相加 # 寻找数组的中心下标 #
【基础算法】浅浅刷个小题 # 搜索插入位置 # 各位相加 # 寻找数组的中心下标 #
leetcode 33 搜索旋转排序数组
leetcode 33 搜索旋转排序数组
97 0
leetcode 33 搜索旋转排序数组
|
Python
LeetCode 33. 搜索旋转排序数组
整数数组 nums 按升序排列,数组中的值 互不相同 。
113 0