leetcode 第168场周赛

5291. 统计位数为偶数的数字

给你一个整数数组 nums,请你返回其中位数为 偶数 的数字的个数。

范围比较小 只有三种位数,所以暴力统计

class Solution(object):
    def findNumbers(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        ans = 0
        chk = [10,1000,100000]
        for i in nums:
            for j in chk:
                tmp = i//j
                if tmp>=1 and tmp<=9:
                    ans+=1
                    break
        return ans

5292. 划分数组为连续数字的集合

给你一个整数数组 nums 和一个正整数 k,请你判断是否可以把这个数组划分成一些由 k 个连续数字组成的集合。
如果可以,请返回 True;否则,返回 False。

也是暴力统计的题目,可行集合必然可以分割,我们模拟分割的过程,如果不能分割说明集合不可行

class Solution(object):
    def isPossibleDivide(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: bool
        """
        if len(nums)%k != 0:
            return False
        mp = {}
        for i in nums:
            mp[i] = mp.get(i,0)+1
        keys = mp.keys()
        keys.sort()
        for i in keys:
            tmp = mp[i]
            if tmp:
                for j in range(i,i+k):
                    if mp.get(j,0)>=tmp:
                        mp[j]-=tmp
                    else:
                        return False
        for i in keys:
            if mp[i] != 0:
                return False
        return True

5293. 子串的最大出现次数

给你一个字符串 s ,请你返回满足以下条件且出现次数最大的 任意 子串的出现次数:

  • 子串中不同字母的数目必须小于等于 maxLetters 。
  • 子串的长度必须大于等于 minSize 且小于等于 maxSize 。

题意比较恶心,我的做法就是暴力统计,因为maxSize 只有26

class Solution(object):
    def maxFreq(self, s, maxLetters, minSize, maxSize):
        """
        :type s: str
        :type maxLetters: int
        :type minSize: int
        :type maxSize: int
        :rtype: int
        """
        ans = 0
        mp = {}
        for i in range(0,len(s)-minSize+1):
            cnt = [0]*300
            tmpcnt = 0
            tmpstr = ""
            for j in range(0,minSize-1): # i ~ i+minSize-2
                cnt[ord(s[i+j])]+=1
                if cnt[ord(s[i+j])] == 1:
                    tmpcnt+=1
                tmpstr += s[i+j]
            for j in range(minSize-1,maxSize):# i ~ i+maxSize-1
                if i+j>=len(s):
                    break
                cnt[ord(s[i+j])]+=1
                if cnt[ord(s[i+j])] == 1:
                    tmpcnt+=1
                tmpstr += s[i+j]
                if tmpcnt <= maxLetters:
                    mp[tmpstr] = mp.get(tmpstr,0)+1
                    ans = max(ans,mp[tmpstr])
                else:
                    break
        return ans

5294. 你能从盒子里获得的最大糖果数

给你 n 个盒子,每个盒子的格式为 [status, candies, keys, containedBoxes] ,其中:

  • 状态字 status[i]:整数,如果 box[i] 是开的,那么是 1 ,否则是 0 。
  • 糖果数 candies[i]: 整数,表示 box[i] 中糖果的数目。
  • 钥匙 keys[i]:数组,表示你打开 box[i] 后,可以得到一些盒子的钥匙,每个元素分别为该钥匙对应盒子的下标。
  • 内含的盒子 containedBoxes[i]:整数,表示放在 box[i] 里的盒子所对应的下标。
    给你一个 initialBoxes 数组,表示你现在得到的盒子,你可以获得里面的糖果,也可以用盒子里的钥匙打开新的盒子,还可以继续探索从这个盒子里找到的其他盒子。

请你按照上述规则,返回可以获得糖果的 最大数目 。

很显然可以搜索,从初始化的盒子集合开始处理,无法处理的就留着,打开的盒子就拿走糖果,获得新盒子和钥匙,然后再从现有盒子处理重复这个过程
特殊情况下,部分盒子没法打开,如果我们发现某次钥匙且盒子没有更新我们就不再继续处理

class Solution(object):
    def maxCandies(self, status, candies, keys, containedBoxes, initialBoxes):
        """
        :type status: List[int]
        :type candies: List[int]
        :type keys: List[List[int]]
        :type containedBoxes: List[List[int]]
        :type initialBoxes: List[int]
        :rtype: int
        """
        vis = [0]*1010
        def dfs(ownedboxs,ownedkeys):
            tmpans = 0
            if ownedboxs:
                mark = False
                tmpboxs = []
                for j in ownedboxs:
                    if vis[j]:
                        continue
                    if status[j] or j in ownedkeys:
                        vis[j] = 1
                        tmpans += candies[j]
                        ownedkeys.extend(keys[j])
                        tmpboxs.extend(containedBoxes[j])
                        mark = True
                    else:
                        tmpboxs.append(j)
                if mark:
                    return tmpans + dfs(tmpboxs,ownedkeys)
            return tmpans
        return dfs(initialBoxes,[])
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • HTML 5 HTML5概述 因特网上的信息是以网页的形式展示给用户的,因此网页是网络信息传递的载体。网页文件是用...
    阿啊阿吖丁阅读 5,107评论 0 0
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 4,148评论 0 2
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,626评论 0 4
  • 941. 有效的山脉数组 题目难度Easy 给定一个整数数组 A,如果它是有效的山脉数组就返回 true,否则返回...
    独孤岳阅读 519评论 0 0
  • 《对罗胖跨年演讲的小结》 碌碌无为的平头老百姓,想做点事情,有机会吗?按罗胖的看法,一切都还不晚,因为时间是有的,...
    朵朵云白阅读 244评论 0 0

友情链接更多精彩内容