【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.搜索插入位置


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

相关文章
|
vr&ar
leetcode每日一题 2021/4/7 81. 搜索旋转排序数组 II
leetcode每日一题 2021/4/7 81. 搜索旋转排序数组 II
41 0
|
4月前
|
算法
【算法】二分算法——搜索插入位置
【算法】二分算法——搜索插入位置
|
6月前
|
存储 算法 数据挖掘
LeetCode 题目 81:搜索旋转排序数组 II
LeetCode 题目 81:搜索旋转排序数组 II
|
7月前
|
算法 Java C++
实现一个二分搜索算法,搜索指定元素在已排序数组中的位置。(递归或者非递归实现)
实现一个二分搜索算法,搜索指定元素在已排序数组中的位置。(递归或者非递归实现)
47 0
|
算法
【算法挨揍日记】day10——704. 二分查找、34. 在排序数组中查找元素的第一个和最后一个位置
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
364 0
|
算法
每日一题——搜索插入位置(二分查找)
每日一题——搜索插入位置(二分查找)
|
算法 索引
【力扣】搜索插入位置 学习大神的二分法查找
【力扣】搜索插入位置 学习大神的二分法查找
【力扣】搜索插入位置 学习大神的二分法查找
|
存储
LeetCode 79单词搜索&80删除排序数组中的重复项Ⅱ&81.搜索旋转排序数组Ⅱ
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
81 0
LeetCode 79单词搜索&80删除排序数组中的重复项Ⅱ&81.搜索旋转排序数组Ⅱ
|
算法 索引
基础算法:二分查找 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
266 0
【刷题记录】33. 搜索旋转排序数组
【刷题记录】33. 搜索旋转排序数组
143 0
【刷题记录】33. 搜索旋转排序数组