新的一周 新的摸鱼 27-31

27:简单题就是简单题 跟之前做的删重复的一样啊

class Solution(object):
    def removeElement(self, nums, val):
        """
        :type nums: List[int]
        :type val: int
        :rtype: int
        """
        i = 0
        for each in nums:
            if each != val:
                nums[i] = each
                i += 1
        return i

作者:yizhu-jia
链接:https://leetcode-cn.com/problems/remove-element/solution/wa-ka-ka-ka-ka-by-yizhu-jia-qzu9/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

28:

新的一周  新的摸鱼  27-31

 

 

 

对不起对不起对不起 实在不会写KMP算法/....  所以  对不起 对不起 对不起 

        if needle not in haystack:
            return -1
        elif needle == ‘‘:
            return 0
        else:
            for i in range(len(haystack)):
                if haystack[i:len(needle)+i] == needle[:]:
                    return i


29实现除法    边界问题好烦人

        def div2(a,b):
            if a<b :
                return 0
            count = 0
            sav = b
            while b +b <= a:
                b = b+b
                count += 1
            if a - b >= sav:
                return 2**count + div2(a-b,sav)
            else:
                return 2**count


        flag = 0
        if (dividend >0 and divisor<0) or(dividend <0 and divisor>0):
            flag = 1
        dividend = abs(dividend)
        divisor = abs(divisor)
        count = div2(dividend,divisor)
        if count > 2**31-1:
            if flag == 0:
                count = 2**31-1 
            else:
                count = 2**31
        if flag == 1:
            return -count
        return count

 

30:困难题!!!!!  我是看答案思路自己写的代码  然后     全靠调试.........

新的一周  新的摸鱼  27-31

 

 

 

class Solution(object):
    def findSubstring(self, s, words):
        """
        :type s: str
        :type words: List[str]
        :rtype: List[int]
        """
        n = len(words[0])
        nw = len(words)
        ls = len(s)
        dict1 = {}
        dict2 = {}
        rel = []
        for each in words:
            if each not in dict1:
                dict1[each] = 1
                dict2[each] = 0
            else:
                dict1[each] += 1            #创建两个字典
        for i in range(n):                  #从0到n-1作为开始去遍历
            pos = i    
            j = 0                   
            for each in dict2:
                dict2[each] = 0               #每次遍历初始化  pos指向初始  字典清空  j表示窗口遍历位置要指向开头
            while pos < ls-n*nw +n:
                tar = s[pos+j*n:pos+n*(j+1)]              # 每次分析一个词的长度
                if tar in dict2:
                    dict2[tar] += 1 
                    if dict1 == dict2:                      #两个字典相等 去掉窗口起始位置后移n 加入结果 继续
                        rel.append(pos)
                        dict2[s[pos:pos+n]] -= 1
                        pos += n
                    elif dict2[tar]>dict1[tar]:                  #大了  就不停去掉开始的 直到值相等 
                        FALG = 1                                   #因为最多大一 所以去一个就够
                        while FALG:
                            dict2[s[pos:pos+n]] -= 1
                            if s[pos:pos+n] == tar:
                                FALG = 0
                            pos += n
                            j -= 1
                        j += 1
                    else:
                        j += 1                             #无事发生  往后推一个窗口
                else:                                 #出现没有的单词 就把窗口往后移 越过这个窗口 并清空字典
                    pos = pos+n*(j+1)
                    j = 0
                    for each in dict2:
                        dict2[each] = 0

        return rel

作者:yizhu-jia
链接:https://leetcode-cn.com/problems/substring-with-concatenation-of-all-words/solution/bie-wen-wen-jiu-shi-diao-shi-de-li-liang-6wxu/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

31   实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列(即,组合出下一个更大的整数)。

如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。

必须 原地 修改,只允许使用额外常数空间

 

 最后那个反转 第一次用sorted 然后用reverse 结果都不行 哭了 只能手写
谁能看懂我代码就服他 我自己都搞不懂了 快
没想到这也能超越8.6成的人

 

class Solution(object):
    def nextPermutation(self, nums):
        """
        :type nums: List[int]
        :rtype: None Do not return anything, modify nums in-place instead.
        """
        pos = -1
        flag = 0
        while abs(pos)<len(nums) :
            if nums[pos-1] < nums [pos]:
                flag = pos-1
                break
            pos -= 1
        if flag != 0:
            nextmaxpos = flag +1
            for i in range(-1,flag,-1):
                if nums[i] < nums[nextmaxpos] and nums[i] > nums[flag]:
                    nextmaxpos = i
            nums[flag],nums[nextmaxpos] = nums[nextmaxpos] ,nums[flag]

            for j in range(pos-1,-1):
                minpos = -1
                for i in range(j,-1):
                    if nums[i+1] < nums[minpos]:
                        minpos = i+1
                nums[flag+1] ,nums[minpos]= nums[minpos],nums[flag+1]
                flag += 1
        else:
            l = 0
            r= len(nums)-1
            while(l<r):
                nums[l] ,nums[r]= nums[r],nums[l]
                l+=1
                r-=1

作者:yizhu-jia
链接:https://leetcode-cn.com/problems/next-permutation/solution/shui-neng-kan-dong-wo-dai-ma-jiu-fu-ta-b-ln8t/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

新的一周 新的摸鱼 27-31

上一篇:Debian9 设置静态IP


下一篇:决策变元选择_决策分支策略——文献学习Exponential Recency Weighted Average Branching Heuristic for SAT Solvers