class solution:
def bulbswitch(self, n: int) -> int:
return int(n**(0.5))
第一眼看到這個問題的時候,我們最先想到的辦法,是遍歷每乙個燈泡,然後計算其switch的次數,然後看奇偶,得到該燈泡最後的開關結果,而第i個燈泡開關的次數則是從1到i中因子的個數,因此我們就將該問題轉化成求每個燈泡的因子個數的問題,計算因子個數我們的方法是從1到
如果要進一步降低時間複雜度,那麼就要考慮我們上乙個方法中是不是還是存在很多不必要的運算,我們想到,最終的結果只需要知道第i個數因子的個數是奇數還是偶數,至於它到底是多少,這並不重要,那麼第i個燈泡的因子的個數是不是有一定的規律性,我們舉一些例子,比如說12,其因子為(1,12),(2,6),(3,4),而9,其因子為(1,9),(3,3),如果還不明顯的話,就再多舉一些例子,最後我們發現,第i個燈泡的因子個數的奇偶性,取決於其是不是乙個平方數,道理也很簡單,這裡我重點談思路,證明略去。那麼最後我們從1到n一次遍歷就可以得到每個燈泡最後的開關狀態,此時我們的複雜度降到了o(n)
在2的基礎上,我們發現,最後亮著的燈泡都是平方數字置的,而從1到n中平方數的個數是int(sqrt(n)),考慮到這一點之後我們的複雜度降到了o(1)
這種算是典型的演算法中improvement思路了,首先將問題具體化,從最差的方法開始,逐步提公升,得到最優解。
最優解問題
最優解問題題型隱晦 變化多端,所以總結此類題目的特徵 解法歸類有助於我們更快的想到這類題目的解題方法 佔坑!後續補充 最優解題目特徵 解題思路1 貪心思想 例題 九度oj題目1434 今年暑假不ac 分析過程 乙個節目提供了三個引數 開始時間 結束時間 持續時間。思考開始最早的元素是不是第乙個最優解...
最優解問題
新龜兔賽跑 要求烏龜到達終點的最優解,無非就是貪心,dp,和bfs,dfs.等等方法了,貪心已經排除了,因為我發現,開始的時候我只是把倒數第乙個站點作為終點去考慮,題目中給的測試資料只有三個,當讓是能過的,但是當站點比這多時,這樣做就行不通了,我們只有把每個站點都作為一次終點去考慮,求烏龜到改點時的...
如何智慧型尋找租車問題的最優解
問題是這樣的 傑克管理乙個全國性汽車出租公司的兩個地點。每天,都有一些顧客到這兩個地點租車。如果有車可租,傑克就將車租出並從公司得到10美元的回扣。如果這個地點沒車,傑克就失去了這筆生意。還回的車第二天就可以出租。為了使需要車的地點有車可租,傑克可以在兩個地點間移動車輛,移動每輛車的費用是2美元。我...