【LeetCode刷题记录】简单篇-69-x的平方根

【题目描述】

给你一个非负整数 x ,计算并返回 x 的 算术平方根 。

由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。

注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。


【测试用例】

示例1:

        输入:x = 4

        输出:2

示例2

        输入:x = 8

        输出:2

        解释:8的算术平方根是2.82842...,由于返回类型是整数,小数部分将被舍去。


【思路分析】

法一:暴力法

因为只用返回下取整的算术平方根,所以直接用一个变量 i 从1开始遍历就行,当 i*i > x的时候退出循环,返回 i - 1即可。

法二:二分法

首先定义左右边界,左边界left是0,右边界right是x/2+1(当x ≥ 4时,其算术平方根的范围是[0,x/2+1) ,这个定理应该是初高中定理),再看x=3,因为要下取整,所以算术平方根为1,也满足这个定理;x=2时,满足,而x=0和1时,其算术平方根就是本身,做特殊处理直接返回x就行。

定义循环条件为 left<=right ,这样返回时就返回right,因为退出循环的条件是left>right,又要下取整所以返回right。中间值mid = left + (right - left) / 2,这么写是因为如果写成mid = (left + right) / 2会出现溢出。

在循环体中,将 x / mid 与 mid 做比较,而不用mid * mid 与x作比较,这同样也是为了避免溢出。当 x / mid == mid 时:直接返回mid;

当 x / mid > mid 时:说明 mid*mid<x ,转到右区间查找,left = mid + 1;

当 x / mid < mid 时:说明 mid*mid>x,转到左区间查找,right = mid - 1;

最后直接返回right。


【参考代码】

法一:C实现

#include <stdio.h>

//easy-69-x的平方根
int mySqrt(int x);

int main(){
	int x = 8;
	int res = mySqrt(x);
	printf("%d\n", res);
	return 0;
}

//法一:暴力法
int mySqrt(int x) {
    int i=1;
    while(i*i <= x){
    	i++;
	}
	return i-1;
}

法一:C++实现

#include <iostream>
using namespace std;

//easy-69-x的平方根
class Solution {
public:
    int mySqrt(int x);
};

//法一:暴力法
int Solution::mySqrt(int x){
	long i = 1;
	while(i*i <= x){
		i++;
	}
	return i-1;
}

int main(){
	int x = 8;
	Solution sol;
	int res = sol.mySqrt(x);
	cout<<res<<endl;
	return 0;
}

法二:C实现

#include <stdio.h>

//easy-69-x的平方根
int mySqrt(int x);

int main(){
	int x = 8;
	int res = mySqrt(x);
	printf("%d\n", res);
	return 0;
}

//法二:二分法 
int mySqrt(int x) {
    int left = 0;
	int right = x / 2 + 1;
	int mid;
	if(x <= 1){
		return x;
	}
	while(left <= right){
		mid = left + (right - left) / 2;;
		if(x / mid == mid){
			return mid;
		}else if(x / mid > mid){
			left = mid + 1;
		}else if(x / mid < mid){
			right = mid - 1;
		}
	} 
	return right;
}

法二:C++实现

#include <iostream>
using namespace std;

//easy-69-x的平方根
class Solution {
public:
    int mySqrt(int x);
};

//法二:二分法
int Solution::mySqrt(int x){
	int left = 0;
	int right = x / 2 + 1;
	int mid;
	if(x <= 1){
		return x;
	}
	while(left <= right){
		mid = left + (right - left) / 2;
		if(x / mid == mid){
			return mid;
		}else if(x / mid > mid){
			left = mid + 1;
		}else if(x / mid < mid){
			right = mid - 1;
		}
	}
	return right;
} 

int main(){
	int x = 8;
	Solution sol;
	int res = sol.mySqrt(x);
	cout<<res<<endl;
	return 0;
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/577906.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SystemUI KeyButtonView setDarkIntensity 解析

继承自 ImageView KeyButtonDrawable intensity为0时按键颜色为白色。 intensity为1时黑色为的调用堆栈&#xff1a; java.lang.NullPointerException: Attempt to invoke virtual method int java.lang.String.length() on a null object referenceat com.android.systemui.…

Linux网络编程---多路I/O转接服务器(一)

多路I/O转接服务器 多路IO转接服务器也叫做多任务IO服务器。该类服务器实现的主旨思想是&#xff0c;不再由应用程序自己监视客户端连接&#xff0c;取而代之由内核替应用程序监视文件。 主要使用的方法有三种&#xff1a;select、poll、epoll 一、select多路IO转接 让内核去…

Java 网络编程之TCP(三):基于NIO实现服务端,BIO实现客户端

前面的文章&#xff0c;我们讲述了BIO的概念&#xff0c;以及编程模型&#xff0c;由于BIO中服务器端的一些阻塞的点&#xff0c;导致服务端对于每一个客户端连接&#xff0c;都要开辟一个线程来处理&#xff0c;导致资源浪费&#xff0c;效率低。 为此&#xff0c;Linux 内核…

边缘计算在视频监控领域的应用

一、边缘计算在视频监控领域的应用 运用边缘计算解决视频监控问题&#xff0c;可以带来许多优势。以下是一些具体的应用示例&#xff1a; 实时分析与处理&#xff1a;在视频监控系统中&#xff0c;边缘计算盒子可以实时处理和分析视频流&#xff0c;实现对监控画面的智能识别…

BGP选路实验(锐捷)---AS-PATH选路

实验拓扑图 基本配置如图所示 要求&#xff1a;R8上利用loopback口建立多个分段ip&#xff0c;利用bgp选路原则让双网段数据通过R6转发&#xff0c;单网段数据通过R7转发&#xff0c;这里添加as-path号建议添加自己的bgp所属的as号&#xff0c;以防止修改as-path后影响as-path…

❤️新版Linux零基础快速入门到精通——第二部分❤️

❤️新版Linux零基础快速入门到精通——第二部分❤️ 非科班的我&#xff01;Ta&#xff01;还是来了~~~2. Linux基础命令2.1 类Unix系统目录结构2.2 Linux目录结构2.2.1 Linux用户目录2.2.2 Linux目录练习 2.3 Linux 命令入门2.3.1 命令基础2.3.1.1 help2.3.1.2 man(manual)2.…

Windows Vscode ModuleNotFoundError: No module named

故障现象&#xff1a; Windows Vscode 经常会遇到模块路径查找失败的异常。 如运行2_from_import_test.py后&#xff0c;报错&#xff1a; 发生异常: ModuleNotFoundError No module named programmer File "D:\leolab\programmer\2_from_import_test.py", line 8…

虚拟机VMware下ROS Neotic(Ubuntu 20.04)下安装OpenCV

一、ROS安装 ROS的官方安装步骤&#xff1a; 1、noetic / Ubuntu 20.04 &#xff1a; http://wiki.ros.org/noetic/Installation/Ubuntu 2、melodic / Ubuntu 18.04&#xff1a; http://wiki.ros.org/melodic/Installation/Ubuntu 3、kinetic / Ubuntu 16.04&#xff1a; http:…

C语言:一维数组、二维数组、字符数组介绍

数组 介绍一维数组定义应用方法初始化 举例示例结果 二维数组定义应用方法初始化 举例示例结果 字符数组定义应用方法初始化 举例示例结果分析 介绍 在C语言中&#xff0c;数组是一种基本的数据结构&#xff0c;用于存储一系列相同类型的数据。数组可以是多维的&#xff0c;最…

phpstorm 设置变量,自动补全代码

效果 进入设置->实时模板->PHP->添加 添加动态模板->完善写法 定义->选择PHP->应用就行

什么是宏观经济的先行指标、同步指标与滞后指标

宏观经济波动是一种周期性的繁荣、衰退、萧条、复苏循环变化过程&#xff0c;在这种变动中&#xff0c;不同经济指标的变动并非总与宏观经济运行步调一致。按统计指标变动轨迹与宏观经济变动轨迹的时间关系,可以将其划分为先行指标、同步指标和滞后指标。 一、概念和作用 先行…

JetBrains CLion v2023.3.4 激活版 (C/C++ 集成开发IDE)

前言 JetBrains CLion是一款跨平台的C/C集成开发环境&#xff0c;由JetBrains公司推出。其最新版本支持C14几乎完全&#xff0c;并初步支持C17&#xff0c;使得编写代码更加便捷。CLion还提供了Disassembly view&#xff08;反汇编视图&#xff09;&#xff0c;即使没有源代码…

《欢乐钓鱼大师》攻略:怎么在竞标赛中获得高分?

《欢乐钓鱼大师》锦标赛是游戏中的一项激动人心的钓鱼比赛活动&#xff0c;而在这场比赛中&#xff0c;如何获得高分成为了每位钓手追求的目标。在这篇攻略中&#xff0c;我们将为您详细介绍如何通过优化鱼竿、管理体力、利用buff和词条以及前期准备等方面来提高您在锦标赛中的…

信号分解 | RLMD(鲁棒性局部均值分解)-Matlab

分解效果 RLMD(鲁棒性局部均值分解) RLMD(鲁棒性局部均值分解)-Matlab 代码实现 % %% 清除所有变量 关闭窗口 clc clear all close all%% 导入数据 % data = xlsread(Data.xlsx);%% 输入信号%% RLMD分解 %参数进行设置 % options.display =

【React】CSS 局部样式

书写 CSS 的时候&#xff0c;如果 CSS 文件名包含 module&#xff0c;那么说明该 CSS 是一个局部 CSS 样式文件&#xff0c;类似于 vue 中的 scoped。 .avatarContainer {width: 40px;height: 40px;border-radius: 50%;background: rgb(213, 226, 226); }import styles from ..…

【Redis 开发】缓存雪崩和缓存击穿

缓存问题 缓存雪崩解决方案 缓存击穿互斥锁逻辑时间基于互斥锁解决缓存击穿问题基于逻辑过期方式解决缓存击穿问题 缓存雪崩 缓存雪崩是指在同一时间段&#xff0c;大量的缓存key同时失效或者Redis服务器宕机&#xff0c;导致大量请求到达数据库&#xff0c;带来巨大压力 解决…

游戏发行困境及OgGame云游戏解决方案简述

随着全球化浪潮的持续推进&#xff0c;中国游戏开发者们不再满足于国内市场的发展&#xff0c;而是开始将目光投向更为广阔的海外市场。这一趋势的崛起背后&#xff0c;是中国企业意识到国际化是其发展的必由之路&#xff0c;也是游戏行业突破国内困境的体现。本文将简要阐述游…

【1731】jsp 房租跟踪监控管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 房租跟踪监控管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysq…

为什么常用氢化物

知识星球&#xff08;星球名&#xff1a;芯片制造与封测社区&#xff09;里的学员问&#xff1a;diffusion工序&#xff0c;所需要的气体种类有哪些&#xff1f; Diffusion是什么工序&#xff1f; "Diffusion"工序是通过热能将掺杂剂原子扩散到硅片中&#xff0c;以形…

C++系列-输入输出

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” C输入和输出 我们都知道C语言的输出是用printf函数来实现的&#xff0c;那么C呢&#xff0c;它的实现逻辑是什么呢&#xff0c;让我们一起来看一下&#xff0c; #include<i…
最新文章