国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

LeetCode 之 JavaScript 解答第69題 —— X 的平方根(Squrt(x))

sf_wangchong / 2168人閱讀

摘要:測(cè)試用例輸入輸入輸入負(fù)數(shù)的輸入平方根為正整數(shù)的輸入平方根為小數(shù)的代碼實(shí)現(xiàn)寫(xiě)二分查找代碼需要注意的三點(diǎn)循環(huán)退出條件。使用二分查找之前,判斷問(wèn)題是否滿足二分查找的要求。

Time:2019/4/17
Title: sqrt(x)
Difficulty: Easy
Author: 小鹿

題目:sqrt(x)

Implement int sqrt(int x).

Compute and return the square root of x, where x is guaranteed to be a non-negative integer.

Since the return type is an integer, the decimal digits are truncated and only the integer part of the result is returned.

實(shí)現(xiàn) int sqrt(int x) 函數(shù)。

計(jì)算并返回 x 的平方根,其中 x 是非負(fù)整數(shù)?!浮?/p>

由于返回類(lèi)型是整數(shù),結(jié)果只保留整數(shù)的部分,小數(shù)部分將被舍去。

Example 1:

Input: 4
Output: 2

Example 2:

Input: 8
Output: 2
Explanation: The square root of 8 is 2.82842..., and since 
             the decimal part is truncated, 2 is returned.
Solve:
▉ 問(wèn)題分析
1)根據(jù)題目要求,求一個(gè)指定樹(shù)的平方根,第一要想到的是開(kāi)平方根是沒(méi)有規(guī)律可循的,可能想到一個(gè)暴力破解法,從 1 開(kāi)始遍歷,直到滿足 k^2 < x (k+1)^2 > x 為止。

2) 你可能想到這種方法效率太低,需要從 1 開(kāi)始,如果 x 很大,豈不是需要遍歷很多?能不能規(guī)定一個(gè)范圍,在這個(gè)范圍中查找開(kāi)平方根呢?你會(huì)想到,所有數(shù)的開(kāi)平方根得到的值是永遠(yuǎn)小于等于自身的(0 是自身),所以 x 的開(kāi)平方根的值的范圍一定在 0 < k < x 之間。

3)要想在這個(gè)區(qū)間快速定位找到一個(gè)滿足條件的 x ,最高效的方法莫過(guò)于二分查找,但是可能存在小數(shù),這又涉及到二分查找的四個(gè)變體(二分查找的變形)過(guò)程。如果你之前沒(méi)有連接過(guò),沒(méi)關(guān)系,請(qǐng)看我之前記載的一篇文章。

4)雖然我們已經(jīng)確定了解題方法,但是這時(shí)候不要著急,想一想這個(gè)問(wèn)題是否滿足二分查找的四個(gè)適用條件?哪四個(gè)條件呢?你需要系統(tǒng)學(xué)習(xí)一下就 ok !

▉ 算法思路
1)此過(guò)程分為兩種情況,負(fù)數(shù)和正整數(shù),所以要對(duì)輸入的 x 進(jìn)行判斷。

2)然后開(kāi)始根據(jù)二分查找應(yīng)該注意的「三個(gè)重點(diǎn)」寫(xiě)出無(wú) bug 的代碼。

3)對(duì)二分查找進(jìn)行稍微的變體,因?yàn)槲覀兛赡懿檎业臄?shù)并不是一個(gè)正整數(shù),我們?nèi)≌麛?shù)部分就可以了,小數(shù)部分省略。

▉ 測(cè)試用例
1)輸入 0 

2)輸入1

3)輸入負(fù)數(shù)的 x

4)輸入平方根為正整數(shù)的 x

5)輸入平方根為小數(shù)的 x

▉ 代碼實(shí)現(xiàn)
寫(xiě)二分查找代碼需要注意的三點(diǎn):

1)循環(huán)退出條件。

2)mid 的取值。

3)low 和 hight 的更新。

var mySqrt = function(x) {
     let low = 1;
     let high = x;
     // 如果 x 小于 0 輸出 -1
     if(x < 0) return -1;
     // 循環(huán)終止條件
     while(low <= high){
        // mid 取值
        let mid = Math.floor(low + ((high - low)/2));
        // 判斷平方是否小于等于
        if(Math.pow(mid,2) <= x){
            // 如果小于等于,如果下一值大于 x 則當(dāng)前值為 x 平方根的最小整數(shù)值
            if(Math.pow(mid+1,2) > x || mid === high){
                return mid;
            }else{
                low = mid + 1;
            }
        }else{
            high = mid - 1;
        }
    }
    return 0;
};
▉ 性能分析

暴力破解:

時(shí)間復(fù)雜度:O(n)。你需要從 1 遍歷所有可能的數(shù)據(jù),所以時(shí)間復(fù)雜度為O(n)。

空間復(fù)雜度:O(1)。不需要額外的內(nèi)存空間。

二分法:

時(shí)間復(fù)雜度:O(n)。每次都折半查找,所以查找一個(gè)元素時(shí)間復(fù)雜度為O(logn)。

空間復(fù)雜度:O(1)。不需要額外的內(nèi)存空間。

▉ 小結(jié)
通過(guò)這個(gè)題我們可以總結(jié)一下:

1)如果問(wèn)題涉及到查找,我們要想到使用二分查找來(lái)提高效率。

2)使用二分查找之前,判斷問(wèn)題是否滿足二分查找的要求。


歡迎一起加入到 LeetCode 開(kāi)源 Github 倉(cāng)庫(kù),可以向 me 提交您其他語(yǔ)言的代碼。在倉(cāng)庫(kù)上堅(jiān)持和小伙伴們一起打卡,共同完善我們的開(kāi)源小倉(cāng)庫(kù)!
Github:https://github.com/luxiangqia...

歡迎關(guān)注我個(gè)人公眾號(hào):「一個(gè)不甘平凡的碼農(nóng)」,記錄了自己一路自學(xué)編程的故事。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/103662.html

相關(guān)文章

  • leetcode 二分查找 - easy

    摘要:如果目標(biāo)值不存在于數(shù)組中,返回它將會(huì)被按順序插入的位置。也因?yàn)槭桥判虻臄?shù)組,所以可以考慮二分法。計(jì)算并返回的平方根,其中是非負(fù)整數(shù)。輸入輸出說(shuō)明的平方根是由于返回類(lèi)型是整數(shù),小數(shù)部分將被舍去。是一個(gè)非負(fù)整數(shù),并且在位有符號(hào)整型的范圍內(nèi)。 有時(shí)候會(huì)抽時(shí)間看看題目,鍛煉一下簡(jiǎn)單記錄下二分查找吧,會(huì)持續(xù)更新的啊哈~~~僅供參考,路過(guò)看下就行,歡迎交流~ 第35題 給定一個(gè)排序數(shù)組和一個(gè)目...

    objc94 評(píng)論0 收藏0
  • LeetCode JavaScript 解答239 —— 滑動(dòng)窗口最大值(Sliding W

    摘要:你只可以看到在滑動(dòng)窗口內(nèi)的數(shù)字?;瑒?dòng)窗口每次只向右移動(dòng)一位。返回滑動(dòng)窗口最大值。算法思路暴力破解法用兩個(gè)指針,分別指向窗口的起始位置和終止位置,然后遍歷窗口中的數(shù)據(jù),求出最大值向前移動(dòng)兩個(gè)指針,然后操作,直到遍歷數(shù)據(jù)完成位置。 Time:2019/4/16Title: Sliding Window MaximumDifficulty: DifficultyAuthor: 小鹿 題目...

    spacewander 評(píng)論0 收藏0
  • LeetCode69. Sqrt(x) -- 求一個(gè)數(shù)開(kāi)方

    摘要:牛頓迭代法的原理很簡(jiǎn)單,其實(shí)是根據(jù)在附近的值和斜率,估計(jì)和軸的交點(diǎn),因此牛頓迭代法的公式為其實(shí)就是求切線與軸的交點(diǎn)。代碼利用牛頓法進(jìn)行的更新,比直接從開(kāi)始遍歷所作的循環(huán)要少牛頓迭代法的基本原理,請(qǐng)參考牛頓迭代法求開(kāi)平方 描述 Implement int sqrt(int x). Compute and return the square root of x, where x is gu...

    ddongjian0000 評(píng)論0 收藏0
  • LeetCode JavaScript 解答169 —— 求眾數(shù) I(Majority El

    摘要:小鹿題目算法思路摩爾投票算法題目的要求是讓我們求數(shù)組中超過(guò)一半數(shù)據(jù)以上相同的元素且總是存在的。 Time:2019/4/4Title: Majority Element 1Difficulty: easyAuthor: 小鹿 題目:Majority Element 1 Given an array of size n, find the majority element. The ...

    hightopo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<