319. 燈泡開關(java)
解法一(超時)
解法一會超時,但是這裡要講一下思路為正確的解法做鋪墊。
思路
當我們自己寫幾個測試用例會發現每次需要判斷只有最後一個值,也就是n的值,這個位上的燈泡到底有沒有轉換。
然而判斷這個燈泡有沒有轉換我們要看看什麼會導致他的值發生改變。
我們單純考慮一個點拿n = 9來做例子,首先第1次,第9次都會改變,然後是第3次的時候會改變。總共改變了3次所以狀態變了。
再考慮點n = 8,首先第1,8次都會改變;然後第2,4次會改變,總共改變了4次所以還是不變。
這時候考慮9以前已經改變了的值(1,4)進行累加就可以得到結果3。
下面的程式碼實現是一個時間複雜度為O(n2)的演算法。
class Solution {
public int bulbSwitch(int n) {
if(n == 0) return 0;
int res = 0;
for(int i = 1;i <= n;i++){
if(isSwitch(i)) res++;
}
return res;
}
public boolean isSwitch(int n){
int size = 0;
for(int i = 1;i <= n;i++){
if(n % i == 0) size++;
}
if(size % 2 == 1) {
return true;
}
return false;
}
}
解法二
通過上面的分析我們可以發現,對於n只有當 n = k2的時候才可能有奇數次轉換,否則都是偶數次。所以這時候我們對程式碼進行一點修改:時間複雜度瞬間降到O(logN)
class Solution {
public int bulbSwitch(int n) {
//確認 n 接近 哪個值k的平方
if(n == 0) return 0;
int k = 0;
while(Math.pow(k+1,2) <= n){
k++;
}
return k;
}
}
解法三
通過呼叫jdk的方法我們可以簡化為:
class Solution {
public int bulbSwitch(int n) {
return (int)Math.sqrt(n);
}
}
相關文章
- 燈泡3
- 前端--開關燈前端
- 319. Bulb Switcher
- 氣泡排序(Java)排序Java
- CSS3頁面開關燈效果CSSS3
- JAVA基礎--氣泡排序Java排序
- Java實現氣泡排序Java排序
- 帶燈LED按鈕開關接線方法
- Swift 遊戲開發之「能否關個燈」(〇)Swift遊戲開發
- 科技愛好者週刊(第 295 期):巧妙的燈泡鍾
- java程式的氣泡排序操作Java排序
- FPGA筆記[2]-撥碼開關控制LED燈FPGA筆記
- Swift 遊戲開發之「能否關個燈」(一)Swift遊戲開發
- 用Java語言寫氣泡排序Java排序
- java氣泡排序演算法實現Java排序演算法
- Java排序演算法之氣泡排序Java排序演算法
- led伏安特性實驗誤差分析_測繪小燈泡的伏安特性曲線?
- 燈燈燈
- 2019: 熱身 開燈
- 華碩win10鍵盤燈怎麼開 關閉華碩筆記本鍵盤燈的方法Win10筆記
- hp win10如何關閉鍵盤燈_hp win10怎麼關閉鍵盤燈Win10
- Java 插入公式到PPT幻燈片Java公式
- 咕泡學院JAVA架構師VIP課程Java架構
- 從演算法開始 [氣泡排序]演算法排序
- 從演算法開始[氣泡排序]演算法排序
- Java 插入html字串到PPT幻燈片JavaHTML字串
- Java 將PPT幻燈片轉為HTMLJavaHTML
- 洛谷 P1161 開燈
- java關鍵字列表,Java開發面試題Java面試題
- CSS3聊天氣泡框以及inherit、currentColor關鍵字CSSS3
- 軟體測試學習教程——Java實現氣泡排序Java排序
- 資料結構java版之氣泡排序及優化資料結構Java排序優化
- Java實現氣泡排序和插入排序演算法Java排序演算法
- 氣泡排序排序
- 筆記本win10系統怎麼開啟/關閉鍵盤背光燈筆記Win10
- win10滑鼠關機後燈還亮怎麼辦_win10關機滑鼠燈還亮怎麼解決Win10
- 電腦關機後鍵盤燈還亮怎麼回事 關機後鍵盤燈還亮的解決辦法
- 南外c++集訓列舉題:關燈C++