WEEK 2

leetcode:

no_22 括号生成:
image.png
  • 思路:
    先通过一个递归程序获取所有的' (' 数为n且括号总数为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
  • 思路:
    循环,找到后值比前一位的值小时就返回前一个值的下标,注意左右两侧的边界判定即可
  • 代码
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 比较字符串最小字母出现频次
image.png
  • 思路
    先设计一个f函数来找出str中的最小字母频次,用两个列表分别装querys和words中的字符串最小字母出现频次,然后利用一个双循环来做比较
  • 代码:
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
  • 思路:
    一开始是双循环去判断字符串,提交超时,看了评论里的方法。本题如果想到先排序再做就简单了许多。排序后的有序字符串就不再需要双循环了,因为是有序的,每次对比是否是子文件夹时只需要与list的尾元素进行对比。需要注意的是可能会有“/a/b”和"/a/bc"这种情况,只用python内置的find函数做判断的话会造成误判,所以还需要做一下手动的判断。
  • 代码
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且平均值大于等于阈值的子数组数目
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循环,
不过执行最后一个用例的时候超时了。
看了题解,用了滑动窗口的解决办法。对比两种解决办法,上面的方法虽然看上去只有一次循环,但是每次循环时都要进行一次sum操作,导致性能低下。而滑动窗口方法只有第一次计算时将k个数字相加了,而后的循环中每一次都是减去首位再加上末尾的下一位并做比较的简易运算。

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的最少斐波拉契数字数目
image.png

思路:
这个题用递归很好理解
在每一层递归中根据传入的K值,构造一个Fib数列,判断尾项与K的大小,确定新的K值,并+1,新的K表示原本K减去了能够被减的最大项,。.如果K为1或2或者K和尾项的值刚好相等,直接return 1即可,表示此时的K只需要一个fib数即可减空。

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

对该递归做了优化后就可以通过了:

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

这个优化是:
1、原本字典的功能只是记录有还是没有,现在通过字典值的递增,不仅记录了某个文件名有或者是没有,还记录了有具体多少个,减少了后续操作 (但是不能完全依赖该记录值,不然再某些特定输入下会报错,比如:["a(1)","a","a","a"],不过相比以前的话,还是可以有效降低递归层数的)
2、给递归函数增加了一个参数,这个参数始终记录初次传入该递归函数时的字符串原值,并保证在递归过程中不变,简化了字符串的拼接操作

浅层神经网络
page1

page2

page3

page4

page5

page6

page7
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351