LeetCode 69.x的平方

LeetCode 69.x的平方

思路:

二分查找。从1到x进行二分查找,每次判断mid的平方是否<=x,

如果是,则更新ans=mid,并缩小区间;

如果不是,则缩小区间;

最后则找到最接近的ans,使得ans的平方<=x且ans+1的平方>x,即ans为x的算术平方根
注意:x数据范围为int型的取值范围,则计算平方的时候需要注意可能会溢出

代码:

复制代码
#include<stdio.h>
#include<vector>
#include<string.h>
#include<algorithm>
using namespace std;

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

int main()
{
    int target=9;
    Solution *solution=new Solution();
    printf("%d\n",solution->mySqrt(target));
    delete(solution);
    return 0;
}

总结: 做这道题的时候,没有想明白二分能找到最接近的值,脑子可能当时宕机了,,,归根结底还是对二分的理解不透彻。 还有要注意,运算符+(-)的优先级要高于运算符>>(<<),注意要加括号(在此记录)

相关推荐
【杨(_> <_)】36 分钟前
SAR信号处理重要工具-傅里叶变换(二)
算法·信号处理·傅里叶分析·菲涅尔函数
怎么没有名字注册了啊41 分钟前
爬动的蠕虫
算法
取酒鱼食--【余九】42 分钟前
机器人学基础(一)【坐标系和位姿变换】
笔记·算法·机器人·开源·机器人运动学·机器人学基础
晨非辰1 小时前
【面试高频数据结构(四)】--《从单链到双链的进阶,读懂“双向奔赴”的算法之美与效率权衡》
java·数据结构·c++·人工智能·算法·机器学习·面试
im_AMBER1 小时前
数据结构 03 栈和队列
数据结构·学习·算法
凸头1 小时前
以AtomicInteger为例的Atomic 类的底层CAS细节理解
java·jvm·算法
前端小刘哥2 小时前
赋能在线教育与企业培训:视频直播点播平台EasyDSS视频点播的核心技术与应用实践
算法
吗~喽2 小时前
【LeetCode】四数之和
算法·leetcode·职场和发展
Net_Walke2 小时前
【散列函数】哈希函数简介
算法·哈希算法
卿言卿语3 小时前
CC1-二叉树的最小深度
java·数据结构·算法·leetcode·职场和发展