leetcode 第 158 场周赛

1221. 分割平衡字符串

在一个「平衡字符串」中,'L' 和 'R' 字符的数量是相同的。
给出一个平衡字符串 s,请你将它分割成尽可能多的平衡字符串。
返回可以通过分割得到的平衡字符串的最大数量。

因为是严格分割,所以之间遍历,统计L和R平衡

class Solution(object):
    def balancedStringSplit(self, s):
        """
        :type s: str
        :rtype: int
        """
        pre = 0
        ans = 0
        for i in s:
            if pre == 0:
                ans += 1
            if i == 'L':
                pre += 1
            else:
                pre -= 1
        return ans

1222. 可以攻击国王的皇后

在一个 8x8 的棋盘上,放置着若干「黑皇后」和一个「白国王」。
「黑皇后」在棋盘上的位置分布用整数坐标数组 queens 表示,「白国王」的坐标用数组 king 表示。
「黑皇后」的行棋规定是:横、直、斜都可以走,步数不受限制,但是,不能越子行棋。
请你返回可以直接攻击到「白国王」的所有「黑皇后」的坐标(任意顺序)。

很裸的题目,所以就暴力搜索8个方向最先遇到的黑皇后位置就是答案内容之一。

class Solution(object):
    def queensAttacktheKing(self, queens, king):
        """
        :type queens: List[List[int]]
        :type king: List[int]
        :rtype: List[List[int]]
        """
        arrary = []
        dir = [[0,1],[0,-1],[1,0],[-1,0],[1,1],[-1,-1],[-1,1],[1,-1]]
        for move in dir:
            for i in range(1,8):
                tmp = [move[0]*i+king[0],move[1]*i+king[1]]
                if self.test(queens,tmp):
                    arrary.append(tmp)
                    break
        return arrary
        
    def test(self, queens, pos):
        for i in queens:
            if i[0] == pos[0] and i[1] == pos[1]:
                print True,pos
                return True
        return False

1223. 掷骰子模拟

有一个骰子模拟器会每次投掷的时候生成一个 1 到 6 的随机数。
不过我们在使用它时有个约束,就是使得投掷骰子时,连续 掷出数字 i 的次数不能超过 rollMax[i](i 从 1 开始编号)。
现在,给你一个整数数组 rollMax 和一个整数 n,请你来计算掷 n 次骰子可得到的不同点数序列的数量。
假如两个序列中至少存在一个元素不同,就认为这两个序列是不同的。由于答案可能很大,所以请返回 模 10^9 + 7 之后的结果。

想了一个很蠢的做法DP,通过现有状态进行下一步状态的递推,最终的话通过最后一步的所有状态进行累加求和,暂时没有三维数组的构造经验,待补

1224. 最大相等频率

给出一个正整数数组 nums,请你帮忙从该数组中找出能满足下面要求的 最长 前缀,并返回其长度:
从前缀中 删除一个 元素后,使得所剩下的每个数字的出现次数相同。
如果删除这个元素后没有剩余元素存在,仍可认为每个数字都具有相同的出现次数(也就是 0 次)。

没什么太好的优化思路。待补

你可能感兴趣的:(leetcode 第 158 场周赛)