算法leetcode|69. x 的平方根(rust重拳出擊)


文章目錄

  • 69. x 的平方根:
    • 樣例 1:
    • 樣例 2:
    • 提示:
  • 分析:
  • 題解:
    • rust:
    • go:
    • c++:
    • python:
    • java:


69. x 的平方根:

給你一個非負整數 x ,計算并返回 x算術平方根

由于返回類型是整數,結果只保留 整數部分 ,小數部分將被 舍去

注意:不允許使用任何內置指數函數和算符,例如 pow(x, 0.5) 或者 x ** 0.5

樣例 1:

輸入:x = 4輸出:2

樣例 2:

輸入:x = 8輸出:2解釋:8 的算術平方根是 2.82842..., 由于返回類型是整數,小數部分將被舍去。

提示:

  • 0 <= x <= 231 - 1

分析:

  • 面對這道算法題目,二當家的再次陷入了沉思。
  • 要開平方,但是不允許使用內置的指數函數,這是故意難為我胖虎。
  • 暴力破解,反正只要整數,從 1x ,一個一個試,就能找到最接近的解,很簡單,但是過于簡單了,一定還有更好的辦法。
  • 答案只要整數,從線性連續的數值里找最優,想到可以用二分查找法,不斷嘗試,二分查找的效率很高,每次都能減少一半的數據量,已經可以滿意了。
  • 還有一個更好的辦法,答案要的是近似的整數,所以還可以使用 牛頓迭代法 ,非常適合高效找到近似解,聽說效率比二分查找還高。
  • 感覺數學還是厲害啊,很多東西都是可以用數學的方法高效解決的,雖然計算機已經很快了,但是很多時候用數學的方式去解決,可以快上加快,很想學好數學。
  • 下面的題解都是使用 牛頓迭代法,找近似解,所以需要有個度,一個停止繼續的點,一般認為兩次連續求得的解的差非常小的時候,就是應該停止繼續循環的時候,我們這里使用 e-7 作為兩次求解的檢查。

題解:

rust:

impl Solution {pub fn my_sqrt(x: i32) -> i32 {if x == 0 {return 0;}let (c, mut x0) = (x as f64, x as f64);loop {let xi = 0.5 * (x0 + c / x0);if (x0 - xi).abs() < 1e-7 {break;}x0 = xi;}return x0 as i32;}
}

go:

func mySqrt(x int) int {if x == 0 {return 0}c, x0 := float64(x), float64(x)for {xi := 0.5 * (x0 + c/x0)if math.Abs(x0-xi) < 1e-7 {break}x0 = xi}return int(x0)
}

c++:

class Solution {
public:int mySqrt(int x) {if (x == 0) {return 0;}double c = x, x0 = x;while (true) {double xi = 0.5 * (x0 + c / x0);if (fabs(x0 - xi) < 1e-7) {break;}x0 = xi;}return int(x0);}
};

python:

class Solution:def mySqrt(self, x: int) -> int:if x == 0:return 0c, x0 = float(x), float(x)while True:xi = 0.5 * (x0 + c / x0)if abs(x0 - xi) < 1e-7:breakx0 = xireturn int(x0)

java:

class Solution {public int mySqrt(int x) {if (x == 0) {return 0;}double c = x, x0 = x;while (true) {double xi = 0.5 * (x0 + c / x0);if (Math.abs(x0 - xi) < 1e-7) {break;}x0 = xi;}return (int) x0;}
}

非常感謝你閱讀本文~
歡迎【點贊】【收藏】【評論】三連走一波~
放棄不難,但堅持一定很酷~
希望我們大家都能每天進步一點點~
本文由 二當家的白帽子:https://le-yi.blog.csdn.net/ 博客原創~


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/37232.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/37232.shtml
英文地址,請注明出處:http://en.pswp.cn/news/37232.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

win10電腦npm run dev報錯解決

npm run dev報錯解決 出現錯誤前的操作步驟錯誤日志解決步驟 出現錯誤前的操作步驟 初始化Vue項目 $ npm create vue3.6.1創建項目文件夾client Vue.js - The Progressive JavaScript Framework? Project name: ? client ? Add TypeScript? ? No ? Add JSX Support? …

【Pytorch:nn.Embedding】簡介以及使用方法:用于生成固定數量的具有指定維度的嵌入向量embedding vector

文章目錄 1、nn.Embedding2、使用場景 1、nn.Embedding 首先我們講解一下關于嵌入向量embedding vector的概念 1&#xff09;在自然語言處理NLP領域&#xff0c;是將單詞、短語或其他文本單位映射到一個固定長度的實數向量空間中。嵌入向量具有較低的維度&#xff0c;通常在幾…

計算機網絡中速率和帶寬的區別

速率&#xff0c;指的是連接在計算機網絡上的主機在數字信道上傳送數據的速率&#xff0c;它也稱為數據率或比特率&#xff0c;單位是bps。速率往往指的是額定速率或者標稱速率&#xff0c;意思也就是在非常理想的情況下才能達到的數據傳送的速率&#xff0c;然而在現實生活中是…

[Mongodb 5.0]單機啟動

安裝完mongodb后&#xff0c;會自動生成下面兩個目錄(mongod.conf中設定的)&#xff0c;用來存放日志和數據 /var/lib/mongo (數據目錄) /var/log/mongodb (日志目錄) 要啟動一個單機版的mongodb&#xff0c;一般有兩種方式&#xff1a; 第一種啟動方式&#xff1a;直接使用…

第5章:神經網絡

神經元模型 上述定義的簡單單元即為神經元模型。 多層網絡 誤差逆傳播算法 標準BP算法&#xff1a;參數更新非常頻繁&#xff0c;可能出現抵消現象。積累BP算法&#xff1a;下降到一定程度上&#xff0c;進行下一步會非常緩慢。 過擬合 早停&#xff1a;劃分訓練集和驗證集…

Java bean 是個什么概念?

Java bean可以把它比作一個"智能的容器"&#xff0c;它具備封裝數據的能力。 Java bean是一種可重用的軟件組件&#xff0c;它主要用于在Java應用程序中存儲和傳遞數據。它是一種符合特定規范的Java類&#xff0c;通過封裝數據和提供訪問方法&#xff0c;使數據的管…

vue3+ts使用antv/x6

使用 2.x 版本 x6.antv 新官網: 安裝 npm install antv/x6 //"antv/x6": "^2.1.6",項目結構 1、初始化畫布 index.vue <template><div id"container"></div> </template><script setup langts> import { onM…

redis — 基于Spring Boot實現redis延遲隊列

1. 業務場景 延時隊列場景在我們日常業務開發中經常遇到&#xff0c;它是一種特殊類型的消息隊列&#xff0c;它允許把消息發送到隊列中&#xff0c;但不立即投遞給消費者&#xff0c;而是在一定時間后再將消息投遞給消費者。延遲隊列的常見使用場景有以下幾種&#xff1a; 在…

HoudiniVex筆記_P23_SDFBasics有向距離場

原視頻&#xff1a;https://www.youtube.com/playlist?listPLzRzqTjuGIDhiXsP0hN3qBxAZ6lkVfGDI Bili&#xff1a;Houdini最強VEX算法教程 - VEX for Algorithmic Design_嗶哩嗶哩_bilibili Houdini版本&#xff1a;19.5 1、什么是SDF Houdini支持兩種體積類型&#xff0c;…

使用wxPython和PyMuPDF提取PDF頁面指定頁數的內容的應用程序

在本篇博客中&#xff0c;我們將探討如何使用wxPython和PyMuPDF庫創建一個簡單的Bokeh應用程序&#xff0c;用于選擇PDF文件并提取指定頁面的內容&#xff0c;并將提取的內容顯示在文本框中。 C:\pythoncode\new\pdfgetcontent.py 準備工作 首先&#xff0c;確保你已經安裝了…

44 | 酒店預訂及取消的數據分析

1.背景介紹 數據集來自Kaggle網站上公開的Hotel booking demand項目 該數據集包含了一家城市酒店和一家度假酒店的預訂信息,包括預訂時間、入住時間、成人、兒童或嬰兒數量、可用停車位數量等信息。 數據集容量約為12萬32 本次數據分析主要包含如下內容: 總覽數據,完成對…

大數據-玩轉數據-Flink網頁埋點PV統計

一、說明 衡量網站流量一個最簡單的指標&#xff0c;就是網站的頁面瀏覽量&#xff08;Page View&#xff0c;PV&#xff09;。用戶每次打開一個頁面便記錄1次PV&#xff0c;多次打開同一頁面則瀏覽量累計。 一般來說&#xff0c;PV與來訪者的數量成正比&#xff0c;但是PV并不…

虹科干貨 | 化身向量數據庫的Redis Enterprise——快速、準確、高效的非結構化數據解決方案!

用戶期望在他們遇到的每一個應用程序和網站都有搜索功能。然而&#xff0c;超過80%的商業數據是非結構化的&#xff0c;以文本、圖像、音頻、視頻或其他格式存儲。Redis Enterprise如何實現矢量相似性搜索呢&#xff1f;答案是&#xff0c;將AI驅動的搜索功能集成到Redis Enter…

STABLE DIFFUSION模型及插件的存放路徑

記錄下學習SD的一些心得&#xff0c;使用的是秋葉大佬的集成webui&#xff0c;下載了之后點擊啟動器即可開啟&#xff0c;文件夾中的內容如下 主模型存放在models文件下的stable-diffusion文件夾內&#xff0c;一些擴展類的插件是存放在extensions文件夾下

【MFC】12.雙緩沖序列化機制-筆記

雙緩沖 雙緩沖在之前寫字符雨的時候&#xff0c;已經簡單介紹過&#xff0c;今天我們來寫一個簡單的程序來體會雙緩沖機制 我們實現一個在屏幕上畫直線的功能&#xff1a; 在類中添加變量&#xff0c;保存起點坐標和終點坐標&#xff1a; //定義一個容器&#xff0c;保存每…

【189】Java Spring利用HTTP輪詢遠程控制樹莓派4B繼電器開關

因為項目需求&#xff0c;要實現PC遠程控制警鈴的效果。警鈴結構簡單&#xff0c;只需要通上12V的直流電就可以報警。本文的樹莓派設備是在樹莓派4B的基礎上找硬件廠商搞的定制化產品。樹莓派4B通過4G網卡連接互聯網&#xff0c;并利用GPIO控制12V直流電的繼電器開關。樹莓派4B…

【設計模式】責任鏈模式

顧名思義&#xff0c;責任鏈模式&#xff08;Chain of Responsibility Pattern&#xff09;為請求創建了一個接收者對象的鏈。這種模式給予請求的類型&#xff0c;對請求的發送者和接收者進行解耦。這種類型的設計模式屬于行為型模式。 在這種模式中&#xff0c;通常每個接收者…

移動端預覽指定鏈接的pdf文件流

場景 直接展示外部系統返回的獲取文件流時出現了跨域問題&#xff1a; 解決辦法 1. 外部系統返回的請求頭中調整&#xff08;但是其他系統不會給你改的&#xff09; 2. 我們系統后臺獲取文件流并轉為新的文件流提供給前端 /** 獲取傳入url文件流 */ GetMapping("/get…

Java 正則表達式【非貪婪匹配、格式驗證、反向引用、API】

非貪婪匹配 非貪婪匹配的元字符是問號 ? 當此字符跟在任何其他限定符&#xff08;*、、&#xff1f;、{n}、{m}、{n,m}&#xff09;之后&#xff0c;匹配模式是 "非貪心的"。非貪心的意思就是每次匹配搜索到的盡可能短的字符串&#xff0c;可以是0個。 案例 對…

30 | 中國高校數據分析

一、數據源 本項目使用了兩個csv的數據文件,一個是中國高校(大學)的數據,一個是中國高校專業設置的數據 數據基本欄位:高校(大學)的數據高校專業設置的數據學校學校省份專業類別城市專業名稱地址國家特色專業水平層次辦學類別辦學類型985211雙一流二、數據分析目標 本…