一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

有趣的算法題熱熱身:燈泡開關(guān)

算法與數(shù)據(jù)結(jié)構(gòu) ? 來源:牛牛碼特 ? 作者:牛牛碼特 ? 2022-06-16 09:30 ? 次閱讀
計(jì)算機(jī)基礎(chǔ)和算法是能否拿到一個(gè)好offer的關(guān)鍵因素,月底牛牛就忙完手上項(xiàng)目了,到時(shí)也會(huì)多分享相關(guān)內(nèi)容,今天就先整一道LeetCode上有趣的算法題熱熱身:燈泡開關(guān)。 01故事起源

初始時(shí)有 n 個(gè)燈泡,均處于關(guān)閉狀態(tài)。

對某個(gè)燈泡切換開關(guān)意味著:如果燈泡狀態(tài)為關(guān)閉,那該燈泡就會(huì)被開啟;而燈泡狀態(tài)為開啟,那該燈泡就會(huì)被關(guān)閉。

第 1 輪,每個(gè)燈泡切換一次開關(guān)。即打開所有的燈泡。

第 2 輪,每兩個(gè)燈泡切換一次開關(guān)。即每兩個(gè)燈泡關(guān)閉后一個(gè)。

第 3 輪,每三個(gè)燈泡切換一次開關(guān)。即位于第3、6、9···的燈泡切換開關(guān)。

第 i 輪,每 i 個(gè)燈泡切換一次開關(guān)。而第 n 輪,你只切換最后一個(gè)燈泡的開關(guān)。

找出 n 輪后有多少個(gè)亮著的燈泡。

示例 1:

2e2f0c3e-ed13-11ec-ba43-dac502259ad0.png

輸入:n = 6 輸出:2

02問題分析

通過上面的圖例,我們可以很清楚地看到,每一輪都會(huì)切換一批燈泡。關(guān)鍵是可能切換到之前已經(jīng)切換過的燈泡,如果我們通過模擬來暴力解決,那么每一輪就要遍歷一次,肯定超時(shí)。

那我們換種思路想想,這道題似乎更像一道有數(shù)學(xué)規(guī)律的題,這種類型在面試中也不少見。

不過我們不一定能馬上找到規(guī)律,那也不要著急,就按部就班:用0表示off, 1表示on,先列出前10個(gè)燈泡的答案,看看其中有什么規(guī)律可循。

n=1:1

n=2:1 0

n=3:1 0 0

n=4:1 0 0 1

n=5:1 0 0 1 0

n=6:1 0 0 1 0 0

n=7:1 0 0 1 0 0 0

n=8:1 0 0 1 0 0 0 0

n=9:1 0 0 1 0 0 0 0 1

n=10: 1 0 0 10 0 0 0 1 0

03發(fā)現(xiàn)規(guī)律

我們仔細(xì)看看上面的數(shù)據(jù)就會(huì)發(fā)現(xiàn),最后亮燈的位置都在第1、4、9位上,這些位置恰好都是某個(gè)因子的平方,比如4,就是2的平方,不知道大家還記得不,在數(shù)學(xué)上這種數(shù)字就叫做完全平方數(shù)

那我們就可以大膽猜測:最后亮燈的位置,都是完全平方數(shù)。那么每多一個(gè)完全平方數(shù),就多一個(gè)亮的燈泡。

當(dāng)然,這只是一個(gè)猜測,我們可以用暴力法寫一個(gè)程序,把前100個(gè)的情況打印出來,就能看出,是滿足這個(gè)規(guī)律的。

都已經(jīng)驗(yàn)證到100輪了,那么基本就是這個(gè)規(guī)律了。

所以這道題,其實(shí)就是尋找n以內(nèi)有多少個(gè)完全平方數(shù),具體做法是從數(shù)字1遍歷到數(shù)字n,對每個(gè)數(shù)字判斷是否是完全平方數(shù),最差也是O(n)可以解決。

04思考緣由

牛牛是個(gè)打破砂鍋問到底的人,雖然通過規(guī)律,解決了問題,但是不搞清楚為什么,總是心里癢癢的。

我們從上面的規(guī)律,可以猜測燈泡亮的數(shù)量一定和平方根的特性有關(guān)系的。

我們先看看一些非完全平方數(shù):

8的因子: 1 2 4 8;

12的因子:1 2 3 4 6 12;

這些因子一定是偶數(shù)個(gè),為什么呢?

因?yàn)橐粋€(gè)因子,一定是和另一個(gè)因子,配合起來,才能得到這個(gè)數(shù)字。

回到我們的燈泡,比如我們拿n=3的情況來說,第一輪打開了第三輪的燈泡,第三輪就會(huì)給它關(guān)掉,因?yàn)?、3是3的成對因子。

但如果是n=4的情況,1、4雖然也會(huì)成對抵消,但是第二輪的操作卻無法抵消,因?yàn)?的成對因子是2,不會(huì)再重復(fù)出現(xiàn)。

從這里我們就可以看出來,每增加一個(gè)完全平方數(shù),就會(huì)多一個(gè)不會(huì)被抵消掉的因子出現(xiàn),所以個(gè)數(shù)也就增加了1。

05更進(jìn)一步

一般的算法題,O(n)就是性能的極致,但這是一道數(shù)學(xué)規(guī)律題,那我們就得多想想還有沒有更快的辦法。

要找到有多少個(gè)完全平方數(shù),是否一定要遍歷完1-n?

稍微思考下就可以發(fā)現(xiàn)并不是,拿9舉個(gè):3是9的完全平方因子,在3以上的數(shù)字一定不能構(gòu)成完全平方因子,因?yàn)殚_平方一定超過最大數(shù)字9了。如此一來,我們只用考慮3之前的。

不難發(fā)現(xiàn),3之前的1、2是必然滿足完全平方因子的,因?yàn)樗鼈冏銎椒剑欢ㄐ∮?的平方,也就一定在數(shù)據(jù)范圍內(nèi)。

基于上面的分析,我們可以看出,燈泡亮的個(gè)數(shù),就是n的平方根向下取整個(gè),代碼就一行:

return (int)Math.sqrt(n)

06燈泡復(fù)盤其實(shí)在面試中,遇到這種數(shù)學(xué)模型的題,是很容易翻車的。如果只是干想,在面試緊張的環(huán)境下,很可能大腦一片空白。 不過,這種題的套路也是有的,基本都可以用先實(shí)驗(yàn),再猜測,再論證的方式去解決,這個(gè)不僅僅是面試套路,也是一種很優(yōu)秀的做事情的模式。

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4684

    瀏覽量

    94391
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3817

    瀏覽量

    82208

原文標(biāo)題:LC319:燈泡開關(guān)

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    SVPWM的原理及法則推導(dǎo)和控制算法詳解

    SVPWM 是近年發(fā)展的一種比較新穎的控制方法,是由三相功率逆變器的六個(gè)功率開關(guān)元件組成的特定開關(guān)模式產(chǎn)生的脈寬調(diào)制波,能夠使輸出電流波形盡 可能接近于理想的正弦波形??臻g電壓矢量 PWM 與傳統(tǒng)
    發(fā)表于 03-14 14:51

    開關(guān)電源的基礎(chǔ)知識題目及答案

    本帖最后由 噯唱歌de圖圖 于 2025-3-5 15:11 編輯 第1:省電模式具有以下哪些性能特征?A高的輕負(fù)載效率B固定的開關(guān)頻率C可能存在 EMI 問題D在輕負(fù)載時(shí)具有較高的紋波電壓
    發(fā)表于 03-05 15:02

    PID控制算法的C語言實(shí)現(xiàn):PID算法原理

    在工業(yè)應(yīng)用中 PID 及其衍生算法是應(yīng)用最廣泛的算法之一,是當(dāng)之無愧的萬能算法,如果能夠熟練掌握 PID 算法的設(shè)計(jì)與實(shí)現(xiàn)過程,對于一般的研發(fā)人員來講,應(yīng)該是足夠應(yīng)對一般研發(fā)問題了,而
    發(fā)表于 02-26 15:24

    應(yīng)用MSP430G2553與ADS1120檢測K型熱電偶溫度,輸入為正,怎么讀數(shù)為負(fù)?

    應(yīng)用MSP430G2553與ADS1120檢測K型熱電偶溫度,連接如圖示 設(shè)定方式:AINp=AIN0,AINn=AIN1,連續(xù)模式,PGA=64,內(nèi)部參考電壓, 現(xiàn)象:不加熱熱電偶第一次讀數(shù)0x8050,第二次以后0xC050 加熱熱電偶,讀數(shù)從0xC0XX開始增加
    發(fā)表于 01-07 06:13

    基站開關(guān)電源的管理及維護(hù)

    基站開關(guān)電源的管理及維護(hù) 導(dǎo)讀 本文重點(diǎn)介紹了開關(guān)電源的“類型及使用場景、配置原則及算法、日常管理及維護(hù)”三部分內(nèi)容。 第一部分? 類型及使用場景 1.組合式開關(guān)電源 2.嵌入式
    的頭像 發(fā)表于 12-16 16:28 ?1356次閱讀
    基站<b class='flag-5'>開關(guān)</b>電源的管理及維護(hù)

    一種基于深度學(xué)習(xí)的二維拉曼光譜算法

    近日,天津大學(xué)精密儀器與光電子工程學(xué)院的光子芯片實(shí)驗(yàn)室提出了一種基于深度學(xué)習(xí)的二維拉曼光譜算法,成果以“Rapid and accurate bacteria identification
    的頭像 發(fā)表于 11-07 09:08 ?589次閱讀
    一種基于深度學(xué)習(xí)的二維拉曼光譜<b class='flag-5'>算法</b>

    高校開展RK3588課研究 只能人工標(biāo)注練算法?

    進(jìn)行研究開發(fā),是一個(gè)不錯(cuò)的選擇。這個(gè)過程中如何讓算法更加精準(zhǔn)的識別檢測目標(biāo)成為首要解決的問題。要想讓AI算法更能精確的識別檢測目標(biāo),可以利用AI的深度學(xué)習(xí)能力,讓
    的頭像 發(fā)表于 10-23 08:07 ?486次閱讀
    高校開展RK3588課<b class='flag-5'>題</b>研究    只能人工標(biāo)注練<b class='flag-5'>算法</b>?

    用高端開關(guān)驅(qū)動(dòng)燈泡負(fù)載

    電子發(fā)燒友網(wǎng)站提供《用高端開關(guān)驅(qū)動(dòng)燈泡負(fù)載.pdf》資料免費(fèi)下載
    發(fā)表于 09-24 09:33 ?0次下載
    用高端<b class='flag-5'>開關(guān)</b>驅(qū)動(dòng)<b class='flag-5'>燈泡</b>負(fù)載

    飛騰產(chǎn)學(xué)合作協(xié)同育人項(xiàng)目結(jié)

    近日,2022年度教育部產(chǎn)學(xué)合作協(xié)同育人項(xiàng)目結(jié)驗(yàn)收會(huì)暨新一期項(xiàng)目建設(shè)啟動(dòng)會(huì)在飛騰信息技術(shù)有限公司舉辦,來自全國 24 所高校的 30 名教師參加會(huì)議,飛騰公司副總經(jīng)理張承義在會(huì)上致辭。
    的頭像 發(fā)表于 09-24 09:28 ?822次閱讀

    短文6:關(guān)于功率因素的有趣問答

    2個(gè)關(guān)于功率因素的有趣問答。
    的頭像 發(fā)表于 09-23 12:22 ?330次閱讀

    判斷燈泡亮度的主要依據(jù)是什么

    判斷燈泡亮度的主要依據(jù)是其發(fā)光強(qiáng)度,通常用流明(Lumen)來衡量。 燈泡亮度的判斷標(biāo)準(zhǔn) 燈泡作為家庭和商業(yè)照明的重要工具,其亮度直接影響到人們的生活和工作環(huán)境。選擇合適的燈泡亮度,可
    的頭像 發(fā)表于 08-15 17:05 ?4778次閱讀

    燈泡亮度由電流還是電壓決定

    燈泡的亮度主要由燈泡的實(shí)際功率決定,而非單一的電流或電壓。以下是對這一結(jié)論的介紹: 一、實(shí)際功率的作用 燈泡的亮度取決于其實(shí)際功率,即燈泡在工作時(shí)單位時(shí)間內(nèi)消耗的電能轉(zhuǎn)化為光能和內(nèi)能的
    的頭像 發(fā)表于 08-15 17:04 ?7163次閱讀

    維修電源板時(shí)串個(gè)燈泡有什么用

    在維修電源板時(shí),串接一個(gè)燈泡具有多重作用,主要體現(xiàn)在以下幾個(gè)方面: 1. 保護(hù)電源和電路 防止短路損壞 :當(dāng)電源板存在短路故障時(shí),串接的燈泡可以起到限流的作用,防止過大的電流通過故障點(diǎn),從而保護(hù)電源
    的頭像 發(fā)表于 08-15 16:26 ?3433次閱讀

    思爾芯賽正式發(fā)布,邀你共戰(zhàn)EDA精英挑戰(zhàn)賽!

    全新的挑戰(zhàn)。今年的賽,我們更加聚焦于數(shù)字集成電路設(shè)計(jì)的核心領(lǐng)域,直擊當(dāng)前超大規(guī)模設(shè)計(jì)下硬件仿真的技術(shù)難點(diǎn):設(shè)計(jì)并優(yōu)化一種高效的超圖分割算法。該技術(shù)可以加速設(shè)計(jì)驗(yàn)
    的頭像 發(fā)表于 08-03 08:24 ?951次閱讀
    思爾芯賽<b class='flag-5'>題</b>正式發(fā)布,邀你共戰(zhàn)EDA精英挑戰(zhàn)賽!

    想搞懂通信協(xié)議?先來看一篇SPI熱熱身

    SPI是串行外設(shè)接口(SerialPeripheralInterface)的縮寫,它是一種同步串行通信接口,用于微控制器和外圍設(shè)備(如傳感器、SD卡、其他微控制器等)之間的通信。SPI接口通常用于短距離通信,因?yàn)樗恢С珠L距離傳輸。SPI接口的特點(diǎn)包括:全雙工通信:SPI允許數(shù)據(jù)同時(shí)在兩個(gè)方向上傳輸,即主機(jī)可以發(fā)送數(shù)據(jù)到從機(jī),同時(shí)從機(jī)也可以發(fā)送數(shù)據(jù)到主機(jī)。高
    的頭像 發(fā)表于 05-12 08:10 ?2093次閱讀
    想搞懂通信協(xié)議?先來看一篇SPI<b class='flag-5'>熱熱身</b>