LeetCode 367[有效的完全平方數]

EricsT發表於2024-11-26

題目

連結

LeetCode 367[有效的完全平方數]

詳情

LeetCode 367[有效的完全平方數]

例項

LeetCode 367[有效的完全平方數]

提示

LeetCode 367[有效的完全平方數]

題解

思路

求算術平方根,逐漸遍歷的話,數值小應該是沒問題的,但是數值大的話時間應該會超出限制

本質是:給定一個數字,在範圍內找一個數字的平方為該數,找到了則輸出ture,找不到則輸出false

轉換一個思路,即給定一個數字,在範圍內找出該數,也就是查詢問題,最基本的方法就是二分查詢

初始值設定最小值 iMin 為 0,最大值 iMax 為給定值 num

開始迴圈:

求取中間值 iMid = (iMin + iMax) / 2

取中間值的平方 iMul = iMid * iMid

若 iMul 等於 num,則可以找著算術平方根,即返回 true

若 iMul > num,即 iMid > sqrt(num),即所求值小於 iMid,需要在 iMin 到 iMid -1 範圍中查詢,即 iMax = iMid - 1

若 iMul < num,即 iMid < sqrt(num),即所求值大於 iMid,需要在 iMid + 1 到 iMax 範圍中查詢,即 iMin = iMid + 1

繼續執行迴圈,直到 iMin > iMax,退出迴圈,此時為找不到算術平方根,故返回false

程式碼

class Solution {
public:
    bool isPerfectSquare(int num) {

        int iMin = 0;
        int iMax = num;

        while (true)
        {
            long long iMid = (iMin + iMax) / 2;
            long long iMul = iMid * iMid;

            if (num == iMul)
                return true;
            
            if (num > iMul)
                iMin = iMid + 1;
            else
                iMax = iMid - 1;
            
            if (iMin > iMax)
                return false;
        }
    }
};

相關文章