ETH官方钱包

切換
舊版
前往
大廳
主題

[LeetCode] 319. Bulb Switcher

テリ君(桃夫模式) | 2023-04-27 19:44:12 | 巴幣 8 | 人氣 217

這題我原本是用double for loop
但問題來了 很花時(shí)間 特別是 n 超大的時(shí)候
後來我問問Chatgpt
它的意思是我的時(shí)間複雜度 = O(n^2)
但實(shí)際上可以用 O(sqrt(n)) 就好了
然後就沒有然後了

原本的code

class Solution(object):
    def bulbSwitch(self, n):
        x = []
        total = 0
        for _ in range(n):
            x.append(False)
        for i in range(1, n + 1):
            for j in range(1, n + 1):
                if j % i == 0:
                    x[j - 1] = not x[j - 1]
        for i in range(n):
            if x[i] == True:
                total += 1
        
        return total

和精良後的code
class Solution(object):
    def bulbSwitch(self, n):
        return int(n**0.5)
    

    

好喔
看來我的腦袋還在上古世紀(jì)
記錄個(gè)
然後這是時(shí)間複雜度的wiki
放著紀(jì)錄
這是時(shí)間複雜度看不同的演算法

以上

創(chuàng)作回應(yīng)

G家遊民
像是8有 1 2 4 8四個(gè), 9有1,3,9三個(gè)
所以亮的人都有奇數(shù)個(gè)不同的因數(shù)。
那甚麼數(shù)字會有奇數(shù)的因數(shù)呢?
只有完全平方數(shù)k=n^2才會有奇數(shù)個(gè)因數(shù)
(不然假設(shè)p是k的因數(shù),一定有另外一個(gè)q,q*p==k)
2023-04-28 14:53:52
G家遊民
所以這個(gè)問題等價(jià)有幾個(gè)小於等於n的完全平方數(shù)
2023-04-28 14:54:36
G家遊民
你可以從1開始檢驗(yàn)平方之後有沒有大於n,檢查到n開根號停止
或是二分搜根號n(因?yàn)槭菃握{(diào)的)
2023-04-28 14:56:32
G家遊民
@貓狗喵 菇啊,這樣我建一個(gè)表把0到2^32-1開根號的值都存起來就O(1)解了
2023-04-28 14:58:51
テリ君(桃夫模式)
無法理解了QQ
2023-04-28 19:04:22
G家遊民
http://www.lomont.org/papers/2003/InvSqrt.pdf
硬體好噁心 ==
2023-04-28 15:02:50

更多創(chuàng)作