IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【算法】力扣第 285 场周赛(最短代码) -> 正文阅读

[数据结构与算法]【算法】力扣第 285 场周赛(最短代码)

6027. 统计数组中峰和谷的数量

二次遍历,先来看看0x3f大佬的真·二行解法👇(推荐)

class Solution:
    def countHillValley(self, nums: List[int]) -> int:
        nums = [x for x, _ in groupby(nums)]
        return sum((a < b) == (c < b) for a, b, c in zip(nums, nums[1:], nums[2:]))

然后是我用JS写的假·一行解法👇(不推荐)

var countHillValley = (nums) => {let res=0,i=0,n=nums.length; while(i<n){ let start = i, v=nums[i];while (i < n && nums[i] == v) {i++;} if (start > 0 && i < n && nums[start-1] < v == (nums[i] < v)) { res++; } } return res;};

6028. 统计道路上的碰撞次数

灵神一行解法👇(原来是脑筋急转弯,看完表示震惊了!!!)

class Solution:
    def countCollisions(self, s: str) -> int:
        return len(s.lstrip('L').rstrip('R')) - s.count('S')

6029. 射箭比赛中的最大得分

递归+搜索,可可一行解法👇(不推荐,虽然是一行但是非常不pythonic,大家不要学)

class Solution:
    def maximumBobPoints(self, numArrows: int, alice: List[int]) -> List[int]:
        return (res:=(solve:=lambda idx,num:(0, []) if idx==12 else (res1[0], [0]+res1[1])  if (res2:=solve(idx+1, num-alice[idx]-1))[0]+idx<=(res1:=solve(idx+1, num))[0] or num <= alice[idx] else (res2[0]+idx, [alice[idx]+1]+res2[1]))(0,numArrows)[1])[:-1]+[res[-1]+numArrows-sum(res)]

二进制枚举,六弦爷六行解法👇(推荐!)

d = {mask: sum(i for i in range(12) if (mask >> i) & 1 == 1) for mask in range(1 << 12)}
order = sorted(d, key=d.__getitem__, reverse=True)
class Solution:
    def maximumBobPoints(self, numArrows: int, aliceArrows: List[int]) -> List[int]:
        mask = next(mask for mask in order if sum(aliceArrows[i] + 1 for i in range(12) if (mask >> i) & 1 == 1) <= numArrows)
        res = [aliceArrows[i] + 1 if ((mask >> i) & 1 == 1) else 0 for i in range(12)]
        res[0] += numArrows - sum(res)
        return res

6030. 由单个字符重复的最长子字符串

灵剑大佬的板子,比较清新脱俗的写法👇

class Node:
    def __init__(self):
        self.left = None
        self.right = None
        self.lmost = None
        self.lchar = None
        self.rmost = None
        self.rchar = None
        self.most = None
        self.i = None
        self.j = None

    def update_stats(self):
        if self.left is None:
            return
        if self.left.lmost == self.left.j - self.left.i and self.left.lchar == self.right.lchar:
            self.lchar = self.left.lchar
            self.lmost = self.left.lmost + self.right.lmost
        else:
            self.lchar = self.left.lchar
            self.lmost = self.left.lmost
        if self.right.rmost == self.right.j - self.right.i and self.right.rchar == self.left.rchar:
            self.rchar = self.right.rchar
            self.rmost = self.right.rmost + self.left.rmost
        else:
            self.rchar = self.right.rchar
            self.rmost = self.right.rmost
        self.most = max(self.left.most, self.right.most)
        if self.left.rchar == self.right.lchar:
            most2 = self.left.rmost + self.right.lmost
            self.most = max(self.most, most2)

    @classmethod
    def create(cls, s, i, j):
        node = cls()
        if i + 1 == j:
            node.lmost = 1
            node.rmost = 1
            node.lchar = s[i]
            node.rchar = s[i]
            node.most = 1
            node.i = i
            node.j = j
        else:
            m = (i + j) // 2
            node.left = cls.create(s, i, m)
            node.right = cls.create(s, m, j)
            node.i = i
            node.j = j
            node.update_stats()
        return node

    def update(self, pos, char):
        if self.left is None:
            self.lchar = self.rchar = char
        elif pos < self.left.j:
            self.left.update(pos, char)
        else:
            self.right.update(pos, char)
        self.update_stats()

        
class Solution:
    def longestRepeating(self, s: str, queryCharacters: str, queryIndices: List[int]) -> List[int]:
        tree,ans = Node.create(s, 0, len(s)),[]
        for i, c in zip(queryIndices, queryCharacters):
            tree.update(i, c)
            ans.append(tree.most)
        return ans

总结

除开第四题没法做最短解法,前三题顺利完成【5行完成周赛三题】的小目标!

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-22 20:49:54  更:2022-03-22 20:50:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 11:45:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码