WEEK 2

leetcode:

no_22 括號生成:
image.png
  • 思路:
    先通過一個遞歸程序獲取所有的' (' 數(shù)為n且括號總數(shù)為2*n的括號排列字符串歌馍,放在一個list中滚朵。再對該list遍歷湾碎,找出符合要求的字符串尸闸。
  • 代碼:
class Solution(object):
    def generateParenthesis(self, n):
        allUse = []
        def myget(now,n1,n2):
            if n1==0 and n2==0:
                allUse.append(now)
                return 0
            if n1 == 0 and n2 > 0:
                now += ')'
                myget(now,n1,n2-1)
            if n1 > 0 and n2==0:
                now+='('
                myget(now,n1-1,n2)
            if n1 > 0 and n2 > 0:
                myget(now + '(', n1 - 1, n2)
                myget(now + ')', n1, n2 - 1)
        myget('',n,n)
        result = []
        for i in range(len(allUse)):
            this_str = allUse[I]
            top = 0
            flag = 0
            for j in range(len(this_str)):
                if this_str[j] == '(':
                    top += 1
                else:
                    if top == 0:
                        flag = 1
                        break
                    else:
                        top -= 1
            if flag == 0:
                result.append(this_str)
        return result
no_162 尋找峰值
image.png
  • 思路:
    循環(huán)觉增,找到后值比前一位的值小時就返回前一個值的下標兵拢,注意左右兩側(cè)的邊界判定即可
  • 代碼
class Solution(object):
    def findPeakElement(self, nums):
        if len(nums) == 1:
            return 0
        for i in range(len(nums)):
            if i == 0 :
                last = nums[0]
            else:
                if nums[i] > last:
                    last = nums[I]
                if nums[i] < last:
                    return i-1
            if i==len(nums)-1:
                return I
no_1170 比較字符串最小字母出現(xiàn)頻次
image.png
  • 思路
    先設(shè)計一個f函數(shù)來找出str中的最小字母頻次,用兩個列表分別裝querys和words中的字符串最小字母出現(xiàn)頻次逾礁,然后利用一個雙循環(huán)來做比較
  • 代碼:
class Solution(object):
    def numSmallerByFrequency(self, queries, words):
        def f(mystr):
            return mystr.count(min(mystr))
        queries_num = []
        words_num = []
        for i in range(len(queries)):
            queries_num.append(f(queries[I]))
        for i in words:
            words_num.append(f(i))
        # print(queries_num)
        result = []
        for i in range(len(queries_num)):
            num = 0
            for j in range(len(words_num)):
                if words_num[j] > queries_num[I]:
                    num+=1
            result.append(num)
        return result
no_1233 刪除子文件夾
image.png
  • 思路:
    一開始是雙循環(huán)去判斷字符串说铃,提交超時,看了評論里的方法嘹履。本題如果想到先排序再做就簡單了許多腻扇。排序后的有序字符串就不再需要雙循環(huán)了,因為是有序的砾嫉,每次對比是否是子文件夾時只需要與list的尾元素進行對比幼苛。需要注意的是可能會有“/a/b”和"/a/bc"這種情況,只用python內(nèi)置的find函數(shù)做判斷的話會造成誤判焕刮,所以還需要做一下手動的判斷舶沿。
  • 代碼
class Solution(object):
    def removeSubfolders(self, folder):
        mylist = folder
        mylist.sort()
        out = []
        top = -1
        for item in mylist:
            if top == -1:
                out.append(item)
                top += 1
            else:
                topStr = out[top]
                if item.find(topStr) == 0:
                    if item[len(topStr):][0] != '/':
                        out.append(item)
                        top += 1
                else:
                    out.append(item)
                    top += 1
        return out
no_1343 大小為K且平均值大于等于閾值的子數(shù)組數(shù)目
image.png

思路:
一開始用的這樣的代碼:

class Solution(object):
    def numOfSubarrays(self, arr, k, threshold):
        flag = 0
        for i in range(len(arr)-k+1):
            sum_n = sum(arr[i:i+k])
            if sum_n / k >= threshold:
                flag += 1
        return flag

代碼相對精簡且只有一次顯式的for循環(huán),
不過執(zhí)行最后一個用例的時候超時了济锄。
看了題解暑椰,用了滑動窗口的解決辦法霍转。對比兩種解決辦法荐绝,上面的方法雖然看上去只有一次循環(huán),但是每次循環(huán)時都要進行一次sum操作避消,導(dǎo)致性能低下低滩。而滑動窗口方法只有第一次計算時將k個數(shù)字相加了,而后的循環(huán)中每一次都是減去首位再加上末尾的下一位并做比較的簡易運算岩喷。

class Solution(object):
   def numOfSubarrays(self, arr, k, threshold):
       flag = 0
       start = 0
       allN = sum(arr[0:k]) - k*threshold
       if allN >= 0:
           flag += 1
       while k<len(arr):
           allN = allN + arr[k] - arr[start]
           k +=1 
           start += 1
           if allN >= 0 :
               flag += 1
       return flag
no_1414 和為K的最少斐波拉契數(shù)字數(shù)目
image.png

思路:
這個題用遞歸很好理解
在每一層遞歸中根據(jù)傳入的K值恕沫,構(gòu)造一個Fib數(shù)列,判斷尾項與K的大小纱意,確定新的K值婶溯,并+1,新的K表示原本K減去了能夠被減的最大項偷霉,迄委。.如果K為1或2或者K和尾項的值剛好相等,直接return 1即可类少,表示此時的K只需要一個fib數(shù)即可減空叙身。

class Solution(object):
    def findMinFibonacciNumbers(self, k):
        def getFib(K):
            Fib = [1, 1]
            fib = 0
            while fib < K:
                fib = Fib[-1] + Fib[-2]
                Fib.append(fib)
            if K == 1 or K == 2:
                return 1
            if Fib[-1] == K:
                return 1
            if K < Fib[-1]:
                return 1+getFib(K-Fib[-2])
            if K>Fib[-1]:
                return 1+getFib(K-Fib[-1])
        return getFib(k)
no_1487 保證文件名唯一
image.png

一開始的遞歸,總是超時硫狞。

class Solution(object):
    def getFolderNames(self, names):
        mylist = names
        mydict = {}
        out = []
        def now(mystr,state):
            if mydict.get(mystr,'no') == 'no' : #字典中沒有
                mydict[mystr] = 1
                out.append(mystr)
                return
            else: #字典中有這個值了
                if state == 0: #state == 0 表示需要后面加()
                    a = mystr + "(1)"
                    now(a,1)
                else:
                    flag = len(mystr)-1
                    while flag > 0:
                        if mystr[flag] == '(':
                            strNum_L = flag
                            flag = -1
                        flag -= 1
                    strNum = str(int(mystr[strNum_L+1:-1])+1)
                    # strNum = str(int(mystr[-2])+1)
                    a = mystr[:strNum_L]
                    a = a+'('+strNum+')'
                    now(a,1)
        for item in mylist:
            now(item,0)
        return out

對該遞歸做了優(yōu)化后就可以通過了:

class Solution(object):
   def getFolderNames(self, names):
       mylist = names
       mydict = {}
       out = []
       def now(mystr,a,state):
           if mydict.get(a,'no') == 'no' : #字典中沒有
               mydict[a] = 1
               out.append(a)
               return
           else: #字典中有這個值了
               if state == 0: #state == 0 表示需要后面加()
                   aa = a + "(1)"
                   now(mystr,aa,1)
               else:
                   k = mydict[a]
                   mydict[a] += 1
                   aa= mystr + "(" + str(k) +")"
                   now(mystr,aa,1)
       for item in mylist:
           now(item,item,0)
       return out

這個優(yōu)化是:
1信轿、原本字典的功能只是記錄有還是沒有晃痴,現(xiàn)在通過字典值的遞增,不僅記錄了某個文件名有或者是沒有财忽,還記錄了有具體多少個倘核,減少了后續(xù)操作 (但是不能完全依賴該記錄值,不然再某些特定輸入下會報錯即彪,比如:["a(1)","a","a","a"]笤虫,不過相比以前的話,還是可以有效降低遞歸層數(shù)的)
2祖凫、給遞歸函數(shù)增加了一個參數(shù)琼蚯,這個參數(shù)始終記錄初次傳入該遞歸函數(shù)時的字符串原值,并保證在遞歸過程中不變惠况,簡化了字符串的拼接操作

淺層神經(jīng)網(wǎng)絡(luò)
page1

page2

page3

page4

page5

page6

page7
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末遭庶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子稠屠,更是在濱河造成了極大的恐慌峦睡,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件权埠,死亡現(xiàn)場離奇詭異榨了,居然都是意外死亡,警方通過查閱死者的電腦和手機攘蔽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門龙屉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人满俗,你說我怎么就攤上這事转捕。” “怎么了唆垃?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵五芝,是天一觀的道長。 經(jīng)常有香客問我辕万,道長枢步,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任渐尿,我火速辦了婚禮醉途,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘涡戳。我一直安慰自己结蟋,他們只是感情好,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布渔彰。 她就那樣靜靜地躺著嵌屎,像睡著了一般推正。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宝惰,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天植榕,我揣著相機與錄音,去河邊找鬼尼夺。 笑死尊残,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的淤堵。 我是一名探鬼主播寝衫,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼拐邪!你這毒婦竟也來了慰毅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤扎阶,失蹤者是張志新(化名)和其女友劉穎汹胃,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體东臀,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡着饥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了惰赋。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宰掉。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖谤逼,靈堂內(nèi)的尸體忽然破棺而出贵扰,到底是詐尸還是另有隱情仇穗,我是刑警寧澤流部,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站纹坐,受9級特大地震影響枝冀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜耘子,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一果漾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧谷誓,春花似錦绒障、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鸵钝。三九已至,卻和暖如春庐镐,著一層夾襖步出監(jiān)牢的瞬間恩商,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工必逆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留怠堪,地道東北人。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓名眉,卻偏偏與公主長得像粟矿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子损拢,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355