亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

小李飛刀:做題第八彈!

ztyzz / 3473人閱讀

摘要:認(rèn)真做題的分割線第一題乘積最大子序列難度中等給定一個(gè)整數(shù)數(shù)組,找出一個(gè)序列中乘積最大的連續(xù)子序列該序列至少包含一個(gè)數(shù)。

寫(xiě)在前面的話

慢慢轉(zhuǎn)變思路,不再死磕不會(huì)做的題,思路可以先借鑒,但是一定要吃透透。
上周末看完看完了《算法圖解》,感覺(jué)對(duì)一些題目的思路有比較大的幫助,但是還是要在實(shí)踐中理解。

認(rèn)真做題的分割線
第一題

152. 乘積最大子序列
難度:中等
給定一個(gè)整數(shù)數(shù)組nums,找出一個(gè)序列中乘積最大的連續(xù)子序列(該序列至少包含一個(gè)數(shù))。
我的題解:

class Solution(object):
    def maxProduct(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        length = len(nums)
        maxsum = [0 for _ in range(length)]
        minsum = [0 for _ in range(length)]
        maxsum[0] = minsum[0] = nums[0] # 限定最大最小值
        dp = nums[0] #當(dāng)前狀態(tài)
        for i in range(1,len(nums)):
            maxsum[i] = max(maxsum[i-1]*nums[i],minsum[i-1]*nums[i],nums[i])
            minsum[i] = min(maxsum[i-1]*nums[i],minsum[i-1]*nums[i],nums[i])
            dp = max(dp,maxsum[i])
        return dp

我的思路:
這題做了兩次,主體思路為:每次都找到乘積中的最大正值最小負(fù)值,因?yàn)榻^對(duì)值最大的兩個(gè)數(shù)在下一次計(jì)算中才有可能成為最大值。(畢竟題目沒(méi)有限制非負(fù)數(shù))
第一次的時(shí)候報(bào)錯(cuò)的原因是,我記錄了每次的maxsum和minsum,沒(méi)有記錄上一次循環(huán)留下的值。
然鵝,上一次的狀態(tài)會(huì)影響到下一次的狀態(tài),所以必須記住上一步的最優(yōu)解。
可以判斷是個(gè)NP問(wèn)題,但是動(dòng)態(tài)規(guī)劃還得多多練習(xí)

第二題

202. 快樂(lè)數(shù)
難度:簡(jiǎn)單
編寫(xiě)一個(gè)算法來(lái)判斷一個(gè)數(shù)是不是“快樂(lè)數(shù)”。

一個(gè)“快樂(lè)數(shù)”定義為:對(duì)于一個(gè)正整數(shù),每一次將該數(shù)替換為它每個(gè)位置上的數(shù)字的平方和,然后重復(fù)這個(gè)過(guò)程直到這個(gè)數(shù)變?yōu)?1,也可能是無(wú)限循環(huán)但始終變不到 1。如果可以變?yōu)?1,那么這個(gè)數(shù)就是快樂(lè)數(shù)。
我的題解:

class Solution(object):
    def isHappy(self, n):
        """
        :type n: int
        :rtype: bool
        """
        l = []
        while 1:
            l.append(n)
            n = sum([int(i)**2 for i in str(n)])
            if n == 1:
                return True
            elif n in l:
                return False

我的思路:
條件一:要判斷每次的值是否各位平方總和為1,得出是快樂(lè)數(shù)的結(jié)論;
條件二:為了得出非快樂(lè)數(shù)的結(jié)論,這個(gè)數(shù)可能會(huì)陷入循環(huán),那么就要記錄下每輪的值,并進(jìn)行比對(duì)。
其他:
在評(píng)論中發(fā)現(xiàn)了一個(gè)很有趣的算法,就是用dict記錄下肯定會(huì)循環(huán)的數(shù)字的詞典,當(dāng)遇到相關(guān)數(shù)字的時(shí)候就可以跳出了。
一般為{4,16,37,58,89,145,42,20}

第三題

204. 計(jì)數(shù)質(zhì)數(shù)
難度:簡(jiǎn)單
統(tǒng)計(jì)所有小于非負(fù)整數(shù) n 的質(zhì)數(shù)的數(shù)量。
我的題解:

class Solution(object):
    def countPrimes(self, n):
        """
        :type n: int
        :rtype: int
        """
        if n < 3:
            return 0
        else:
            output = [1]*n
            output[0],output[1] = 0,0
            for i in range(2,int(n**0.5+1)):
                if output[i] == 1:
                    m = i**2
                    while m < n:
                        output[m] = 0
                        m += i
        return sum(output)

我的思路:
這個(gè)算法借鑒了評(píng)論里的一個(gè)炒雞有趣的算法,默認(rèn)查詢(xún)是否質(zhì)數(shù)的時(shí)候,我們習(xí)慣用循環(huán)判斷,這樣肯定會(huì)超時(shí)。
而這個(gè)算法呢,叫做厄拉多塞篩法,他給了如下解釋?zhuān)?/p>

比如說(shuō)求20以?xún)?nèi)質(zhì)數(shù)的個(gè)數(shù),首先0,1不是質(zhì)數(shù).2是第一個(gè)質(zhì)數(shù),然后把20以?xún)?nèi)所有2的倍數(shù)劃去.2后面緊跟的數(shù)即為下一個(gè)質(zhì)數(shù)3,然后把3所有的倍數(shù)劃去.3后面緊跟的數(shù)即為下一個(gè)質(zhì)數(shù)5,再把5所有的倍數(shù)劃去.以此類(lèi)推

包括他的題解的寫(xiě)法也很有趣,但是我還沒(méi)弄明白
output[i*i:n:i] = [0] * len(output[i*i:n:i])這一句的意思,還要琢磨下,所以用的是循環(huán)的寫(xiě)法。

def countPrimes(self, n: int) -> int:
        if n < 3:
            return 0     
        else:
            # 首先生成了一個(gè)全部為1的列表
            output = [1] * n
            # 因?yàn)?和1不是質(zhì)數(shù),所以列表的前兩個(gè)位置賦值為0
            output[0],output[1] = 0,0
             # 此時(shí)從index = 2開(kāi)始遍歷,output[2]==1,即表明第一個(gè)質(zhì)數(shù)為2,然后將2的倍數(shù)對(duì)應(yīng)的索引
             # 全部賦值為0. 此時(shí)output[3] == 1,即表明下一個(gè)質(zhì)數(shù)為3,同樣劃去3的倍數(shù).以此類(lèi)推.
            for i in range(2,int(n**0.5)+1): 
                if output[i] == 1:
                    output[i*i:n:i] = [0] * len(output[i*i:n:i])
         # 最后output中的數(shù)字1表明該位置上的索引數(shù)為質(zhì)數(shù),然后求和即可.
        return sum(output)
總結(jié)

小李今天的做題,是痛并快樂(lè)著的!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/43392.html

相關(guān)文章

  • 小李飛刀題第十二彈!

    摘要:寫(xiě)在前面今天沒(méi)有叨逼叨但是又一次錯(cuò)過(guò)了競(jìng)賽愛(ài)睡覺(jué)的小李下周要上班,下下周一定要參加了握拳認(rèn)真做題的分割線第一題兩地調(diào)度公司計(jì)劃面試人。第人飛往市的費(fèi)用為,飛往市的費(fèi)用為。示例輸入輸出解釋第一個(gè)人去市,費(fèi)用為。 寫(xiě)在前面 今天沒(méi)有叨逼叨...但是又一次錯(cuò)過(guò)了競(jìng)賽...愛(ài)睡覺(jué)的小李...下周要上班,下下周一定要參加了(握拳 認(rèn)真做題的分割線 第一題 1029. 兩地調(diào)度公司計(jì)劃面試2N人。...

    yagami 評(píng)論0 收藏0
  • 小李飛刀題第六彈!

    摘要:給定的字符串只含有小寫(xiě)英文字母,并且長(zhǎng)度不超過(guò)。其他這題了,要重做看了其他的人的題解,使用的是無(wú)限逼近中位值的辦法,理論基礎(chǔ)應(yīng)該是泰勒公式。萬(wàn)萬(wàn)沒(méi)想到居然用到了泰勒公式手工執(zhí)行了下算法,反而理解的更快,但是泰勒公式還得再?gòu)?fù)習(xí)下。 寫(xiě)在前面的話 今天持續(xù)做題ing,python有意思~今天的題有點(diǎn)虐心...興許是我太笨了...會(huì)努力學(xué)習(xí)的!動(dòng)態(tài)規(guī)劃我來(lái)啦~ 開(kāi)始做題 第一題 459. 重...

    BigNerdCoding 評(píng)論0 收藏0
  • 小李飛刀題第十彈!

    摘要:第二題漢明距離難度簡(jiǎn)單兩個(gè)整數(shù)之間的漢明距離指的是這兩個(gè)數(shù)字對(duì)應(yīng)二進(jìn)制位不同的位置的數(shù)目。給出兩個(gè)整數(shù)和,計(jì)算它們之間的漢明距離。第三題買(mǎi)賣(mài)股票的最佳時(shí)機(jī)難度簡(jiǎn)單給定一個(gè)數(shù)組,它的第個(gè)元素是一支給定股票第天的價(jià)格。 寫(xiě)在前面 這幾天斷斷續(xù)續(xù)做了題目,也在慢慢體會(huì)一些數(shù)據(jù)思維。終于不用邊做視頻邊寫(xiě)題目啦~開(kāi)心~把這幾天的題解發(fā)一下~ 認(rèn)真做題的分割線 第一題 977. 有序數(shù)組的平方難度...

    bingo 評(píng)論0 收藏0
  • 小李飛刀題第九彈!

    摘要:不過(guò)可能還沒(méi)有抓到動(dòng)態(tài)規(guī)劃的真諦,總覺(jué)得哪里需要再校正下思路。這題也是動(dòng)態(tài)規(guī)劃的題目,目標(biāo)總是要分解為子問(wèn)題。總結(jié)看算法圖解的時(shí)候,涉及動(dòng)態(tài)規(guī)劃的小結(jié)中有這樣的每種動(dòng)態(tài)規(guī)劃解決方案都涉及網(wǎng)格。 寫(xiě)在前面的話 感覺(jué)做題越多遇到的寫(xiě)法越多,有種躍躍欲試的感覺(jué)~ 認(rèn)真做題 第一題 70. 爬樓梯難度:簡(jiǎn)單假設(shè)你正在爬樓梯。需要 n 階你才能到達(dá)樓頂。每次你可以爬 1 或 2 個(gè)臺(tái)階。你有多少...

    Bamboy 評(píng)論0 收藏0
  • 小李飛刀題第七彈!

    摘要:給定一個(gè)大小為的數(shù)組,找到其中的眾數(shù)。第五題合并兩個(gè)有序數(shù)組難度簡(jiǎn)單給定兩個(gè)有序整數(shù)數(shù)組和,將合并到中,使得成為一個(gè)有序數(shù)組。說(shuō)明初始化和的元素?cái)?shù)量分別為和。第六題二叉樹(shù)的最大深度難度簡(jiǎn)單給定一個(gè)二叉樹(shù),找出其最大深度。 寫(xiě)在前面的話 做做做題,慢慢上手了就覺(jué)得刷題速度變快了,果然還是有點(diǎn)笨~希望最后一竅快點(diǎn)通吧~ 開(kāi)始做題 第一題 169. 求眾數(shù)難度:簡(jiǎn)單給定一個(gè)大小為 n 的數(shù)組...

    AlphaWatch 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<