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
- 索尼新款智慧燈泡野心勃勃:智慧燈泡的春天來了嗎?
- 前端--開關燈前端
- 智慧燈泡底座上市 相容蘋果HomeKit平臺蘋果
- 319. Bulb Switcher
- Macbook鍵盤燈怎麼開/關Mac
- java氣泡排序Java排序
- 氣泡排序 java排序Java
- Java 氣泡排序Java排序
- 氣泡排序(Java)排序Java
- 換一個燈泡,要多少個程式設計師?程式設計師
- CSS3頁面開關燈效果CSSS3
- 世界最長壽燈泡已不間斷工作113年
- Swift 遊戲開發之「能否關個燈」(〇)Swift遊戲開發
- 帶燈LED按鈕開關接線方法
- 科技愛好者週刊(第 295 期):巧妙的燈泡鍾
- Java實現氣泡排序Java排序
- 氣泡排序java實現排序Java
- JAVA基礎--氣泡排序Java排序
- Swift 遊戲開發之「能否關個燈」(一)Swift遊戲開發
- FPGA筆記[2]-撥碼開關控制LED燈FPGA筆記
- 飛利浦Hue智慧燈泡玩出新花樣!揮揮手就能亮起來
- java程式的氣泡排序操作Java排序
- 高通研發智慧燈泡:可透過顏色變化嚇跑小偷
- 華碩win10鍵盤燈怎麼開 關閉華碩筆記本鍵盤燈的方法Win10筆記
- 用Java語言寫氣泡排序Java排序
- 燈燈燈
- Linux下鍵盤燈開啟和關閉的指令碼Linux指令碼
- led伏安特性實驗誤差分析_測繪小燈泡的伏安特性曲線?
- java氣泡排序演算法實現Java排序演算法
- Java排序演算法之氣泡排序Java排序演算法
- AIX 下關日誌燈的方法AI
- hp win10如何關閉鍵盤燈_hp win10怎麼關閉鍵盤燈Win10
- Java 插入公式到PPT幻燈片Java公式
- TP-Link推三款智慧Wi-Fi燈泡:有1600萬種顏色
- 從演算法開始 [氣泡排序]演算法排序
- 從演算法開始[氣泡排序]演算法排序