LeetCode-#69xの平方根

一緒に書く習慣を身につけましょう!「ナゲッツデイリーニュープラン・4月更新チャレンジ」に参加して15日目です。クリックしてイベントの詳細をご覧ください

序文

私たちのコミュニティは、Gu Yi(Netflix Growth Hacker、「The Way of the iOS Interview」の著者、ACE Professional Fitness Coach。)のSwiftアルゴリズム問題ソリューションを、誰もが学び、読むことができるテキストバージョンに順次整理します。

これまでにLeetCodeアルゴリズムの68の問題を更新し、更新の時間と進捗状況を維持します(月曜日、水曜日、金曜日の午前9時にリリースされます)。大幅な改善があります。

小さな一歩を積み上げなければ、千マイルを進むことはできません。小さな小川を積み上げなければ、川を作ることはできません。Swiftコミュニティは、前進するためにあなたを伴います。提案やコメントがあれば、記事の最後にメッセージを残してください。私たちはあなたのニーズを満たすために最善を尽くします。

難易度:簡単

1.説明

負でない整数が与えられた場合、の算術平方根を計算xして返します。x

戻り値の型は整数であるため、結果の整数部分のみが保持され、小数部分は四捨五入ます。

注:pow(x, 0.5)またはなどの組み込みの指数関数および演算子は許可されていませんx ** 0.5

2.例

例1

输入:x = 4
输出:2
复制代码

例2

输入:x = 8
输出:2
解释:8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。
复制代码

制限:

  • 0 <= x <= 2^31 - 1

3.回答

class Sqrtx {
    func mySqrt(_ x: Int) -> Int {
        guard x >= 0 else {
            return 0
        }
        
        var left = 0, right = x / 2 + 1
        
        while left <= right {
            let mid = (right - left) / 2 + left
            
            if mid * mid == x {
                return mid
            } else if mid * mid < x {
                left = mid + 1
            } else {
                right = mid - 1
            }
        }
        
        return right
    }
}
复制代码
  • 主なアイデア:二分探索は、でx / 2 + 1始まる必要があるため、その正方形はx + x ^ 2 / 4 + 1、である必要がありますx
  • 時間計算量:O(logn)
  • スペースの複雑さ:O(1)

注:整数のオーバーフローの場合は、(右-左)/ 2+左を使用して中央を取得してください

アルゴリズムソリューションのリポジトリ:LeetCode-Swift

クリックしてLeetCodeの練習に進みます

私たちに関しては

私たちはSwift愛好家によって共同で維持されており、Swift戦闘、SwiftUI、Swift財団を中心とした技術コンテンツを共有し、優れた学習資料を整理して収集します。

おすすめ

転載: juejin.im/post/7087913552542957604