[LeetCode周赛复盘] 第 343 场周赛20230430

news2024/12/28 19:24:13

[LeetCode周赛复盘] 第 343 场周赛20230430

    • 一、本周周赛总结
    • 2660. 保龄球游戏的获胜者
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 2661. 找出叠涂元素
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 2662. 前往目标的最小代价
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 2663. 字典序最小的美丽字符串
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 参考链接

一、本周周赛总结

  • T1 模拟。
  • T2 网格图计数。
  • T3 最短路。
  • T4 贪心构造。

2660. 保龄球游戏的获胜者

2660. 保龄球游戏的获胜者

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 题意描述有误,建议翻看英文题面。
  • 实际第一条规则为:若第i-1或i-2轮有10瓶,则第i轮得分翻倍。

3. 代码实现

def calc(a):
    ans = 0 
    for i,v in enumerate(a):
        if i and a[i-1] == 10 or i-1>0 and a[i-2] == 10:
            v *= 2 
        ans += v 
    return ans 

class Solution:
    def isWinner(self, p1: List[int], p2: List[int]) -> int:
        a,b = calc(p1),calc(p2)
                    
        if a == b:
            return 0
        if a > b:
            return 1
        return 2

2661. 找出叠涂元素

2661. 找出叠涂元素

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 题面不太清楚,实际是按arr元素顺序染色mat,问最早什么时刻能让某一列或行涂满。其中时刻用arr中的下标表示。
  • 那么可以每行/每列计数,当这行/列填满时,计数为n/m。
  • 我在实现时用了减法。

3. 代码实现

class Solution:
    def firstCompleteIndex(self, arr: List[int], mat: List[List[int]]) -> int:
        m,n = len(mat),len(mat[0])
        p = {}
        for i,row in enumerate(mat):
            for j,v in enumerate(row):
                p[v] = (i,j)
        rows = [n]*m 
        cols = [m] * n
        for i,v in enumerate(arr):
            x,y = p[v]
            rows[x] -= 1 
            cols[y] -= 1 
            if not rows[x] or not cols[y]:
                return i

2662. 前往目标的最小代价

2662. 前往目标的最小代价

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 最差的方案就是从start直接走曼哈顿距离到target。
  • 这题主要是建图,给出的捷径肯定要建图。另外若可以走多个结晶,显然是首尾相接。
  • 省事的方案就是直接把所有涉及的点都互相连接即可。稠密图。
  • 然后跑Dijkstra,注意这里的点是离散的,因此可以用defaultdict搞。而且由于是二维坐标,可以直接压缩成一个int64。

  • 另外由于是稠密图,可以不建图,跑朴素n方dij。每次转移遍历所有已处理的最短路,找最短的点扩展,这样可以直接计算到所有为止的曼哈顿距离,省去建图。

3. 代码实现

class Solution:
    def minimumCost(self, start: List[int], target: List[int], specialRoads: List[List[int]]) -> int:
        g = defaultdict(dict)
        def get(x,y):
            return x * 1000000+y 
        def add_edge(u,v,w):
            if v in g[u]:
                g[u][v] = min(g[u][v],w)
            else:
                g[u][v] = w 
        def manhadun(x1,y1,x2,y2):
            return abs(x1-x2) + abs(y1-y2)
        sx,sy = start
        tx,ty = target
        s,t = get(sx,sy),get(tx,ty)
        add_edge(s,t,manhadun(tx,ty,sx,sy))
        ps = {(sx,sy),(tx,ty)}
        def add_p(x,y):
            ps.add((x,y))
        for x1,y1,x2,y2,w in specialRoads:
            add_p(x1,y1)
            add_p(x2,y2)

            u,v = get(x1,y1),get(x2,y2)
            add_edge(u,v,w)
            add_edge(s,u,manhadun(sx,sy,x1,y1))
            add_edge(v,t,manhadun(x2,y2,tx,ty))
        
        for x1,y1 in ps:
            u = get(x1,y1)
            for x2,y2 in ps:
                v = get(x2,y2)
                add_edge(u,v,manhadun(x2,y2,x1,y1))
        
        dis = defaultdict(lambda : inf)
        q = [(0,s)]
        while q:
            c,u = heappop(q)
            if u == t :
                return c
            if c > dis[u]:continue 
            for v, w in g[u].items():
                d = c + w 
                if d < dis[v]:
                    dis[v] = d 
                    heappush(q,(d,v))
        return -1

2663. 字典序最小的美丽字符串

2663. 字典序最小的美丽字符串

1. 题目描述

在这里插入图片描述

2. 思路分析

贪心
  • 由于是要最小的字典序,那么一定是从后边开始修改(increase)。
  • 注意s本身是美丽字符串。挖掘一下性质。
    • 所有长为m回文串可以删除两边的串,剩下长度为m-2的串,且剩余串也必是回文串。
    • 逆否命题为,若中间的子串不回文,原串也必不是回文。
    • 那么本题其实就是要求没有长度为2或者3的回文串。
    • 注意,输入的s已经满足这个性质。
  • 先把s[n-1]++,令i=n-1然后判断:
    • 若s[i]>k,即越界,则需要进位,令s[i]=‘a’,s[i-1]++;这里注意若i==0,则非法。
    • 若s[i]和s[i-1]/s[i-2]冲突,则s[i]需要继续++,直到不冲突。
      • 在这之前,需要先处理s[i-1],若s[i-1]由于i的修改,变得越界或冲突,需要先处理。
        • 那么i-1可能还会修改i-2,优先处理。这是个递归/循环的过程。
    • 当“递”处理到左边某一个位置时,它不再进位或冲突,则不用继续向左探测了,可以向右“归”。
    • 由于k>=4,向右归时若冲突,顶多进到’c’(因为是从’a’开始)。
  • 整个过程是一个先向左再向右的过程。
  • 具体看代码。

  • 注意为什么先处理左边在处理右边,可能的疑问:若先处理左边,右边岂不是可以变小?
  • 实际上,i-1只会因为i的进位而增加,这时i已经是a了,没得减小。

3. 代码实现

class Solution:
    def smallestBeautifulString(self, s: str, k: int) -> str:
        n = len(s)
        s = list(s)
        ans = list(s)
        up = chr(ord('a') + k - 1)
        i = n - 1 
       
        ans[n-1] = chr(ord(ans[i]) + 1)
     
        while i < n:
            if ans[i] > up:
                if i == 0 :
                    return ''
                ans[i] = 'a'
                i -= 1 
                ans[i] = chr(ord(ans[i]) + 1)
            elif i and ans[i] == ans[i-1] or i-1>0 and ans[i] == ans[i-2]:
                ans[i] = chr(ord(ans[i]) + 1)
            else:
                i += 1
                
        return ''.join(ans)      

参考链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/490705.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

优化Google Cloud Storage大文件上传和内存溢出

背景 我们的项目每天都会并行上传好几万份文件到下游的GCP Cloud Storage&#xff0c;当文件比较大时&#xff0c;会采用GCP的可续上传方案&#xff0c;通过把文件切分成多个数据块&#xff0c;分多次HTTP请求上传到GCP Bucket&#xff0c;具体可参考https://cloud.google.com…

560. 和为 K 的子数组【哈希、前缀和】

560. 和为 K 的子数组 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的连续子数组的个数 。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2 示例 2&#xff1a; 输入&#xff1a;nums [1,2,3], k 3 输出&…

智能座舱3.0阶段,看全球巨头如何打造更具“价值”的第三空间

面向中国这一全球最大的汽车电动化与智能化单一市场&#xff0c;作为全球第七大汽车技术供应商的FORVIA佛瑞亚集团开始全面发力。 在2023年上海国际车展上&#xff0c;FORVIA佛瑞亚携旗下佛吉亚与海拉一系列突破性技术和互动体验亮相&#xff0c;展示了对电气化与能源管理、安…

SpringMVC详细介绍和@RequestMapping详细使用说明

目录 SpringMVC SpringMVC 介绍 说明是 MVC MVC 全称∶ Model 模型、View 视图、 Controller 控制器。 MVC 是一种思想 MVC 示意图 理解和解读 SpringMVC 特点&概述 梳理 Spring SpringMVC SpringBoot 的关系 SpringMVC-快速入门 SpringMVC 登录流程分析 SpringM…

OpenGL学习教程之 材质

材质 在真实世界里&#xff0c;每个物体会对光产生不同的反应。钢看起来比陶瓷花瓶更闪闪发光&#xff0c;一个木头箱子不会像钢箱子一样对光产生很强的反射。每个物体对镜面高光也有不同的反应。有些物体不会散射(Scatter)很多光却会反射(Reflect)很多光&#xff0c;结果看起来…

Wireshark的安装及基本使用【计算机网络】

Wireshark的安装与基本使用【计算机网络】 前言推荐Wireshark的安装与基本使用一、下载二、安装三、使用技巧四、简单使用4.1 捕获4.2 简单介绍4.3 过滤 问题 最后 前言 2023-5-4 20:51:42 以下内容源自《【计算机网络】》 仅供学习交流使用 推荐 Wireshark的下载安装及简单…

macOS 13.4Beta 4(22F5059b)With OpenCore 0.9.2开发版 and winPE双引导分区原版镜像

镜像特点 完全由黑果魏叔官方制作&#xff0c;针对各种机型进行默认配置&#xff0c;让黑苹果安装不再困难。系统镜像设置为双引导分区&#xff0c;全面去除clover引导分区&#xff08;如有需要&#xff0c;可以自行直接替换opencore分区文件为clover引导文件&#xff09;备注…

【软考高项笔记】第3章 信息系统治理(针对甲方)3.1 IT治理

第3章 信息系统治理&#xff08;针对甲方&#xff09; 3.1 IT治理 不同于管理&#xff0c;角度更高3.1.1 IT治理基础 目标价值 与业务目标一致 有效利用信息与数据资源 风险管理 管理层次 最高管理层 &#xff08;定目标&#xff0c;战略&#xff09; 执行管理层 &#xff08…

MySQL中添加环境变量和初始化MySQL

添加环境变量 环境变量里面有很多选项&#xff0c;这里我们只用到Path 这个参数。为什么在初始化的开始要添加环境变量呢?在黑框(即CMD) 中输入一个可执行程序的名字&#xff0c;Windows会先在环境变量中的Path所指的路径中寻找一遍&#xff0c;如果找到了就直接执行&#xf…

Android 开发中常见的架构设计模式组件化、插件化和模块化

在 Android 中&#xff0c;组件化、插件化和模块化都是很常见的架构设计手段&#xff0c;用于提高应用开发的灵活性、扩展性和复用性。组件化、插件化和模块化可以混合使用&#xff0c;根据项目的需求和规模选择合适的方案。 组件化(Componentization) 组件化是指将一个大型的…

国产!全志科技T507-H工业核心板( 4核ARM Cortex-A5)规格书

1核心板简介 创龙科技 SOM-TLT507 是一款基于全志科技 T507-H 处理器设计的 4 核 ARM Cortex-A 53 全国产工业核心板,主频高达 1.416GHz 。核心板 CPU 、ROM 、RAM、电源、晶振等所有元器件均采用国产工业级方案,国产化率 100%。 核心板通过邮票孔连接方式引出 MIPI CSI 、…

设计模式——模板方法模式

是什么&#xff1f; 在我们的实际开发中尝尝会遇到这种问题&#xff1a;在设计一个系统时知道了算法所需要的关键步骤&#xff0c;而且确定了这些步骤的执行顺序&#xff0c;但是某些步骤的具体实现还不知道&#xff0c;或者说某些步骤的实现与具体的环境相关&#xff0c;例如每…

CypherRat使用

cypherrat3.5 安卓远控&#xff0c;很早之前在tg下的&#xff0c;现在可能有高版本的 使用感受 图形化界面&#xff08;相比于msf&#xff09;可用于演练新场景&#xff0c;实战的话只能用xx破解版或是瑟瑟apk让人忽视风险继续安装由于国内安卓&#xff0c;部分功能失效 生成…

Android 拍照以及相册中选择(适配高版本)————上传多张照片之压缩处理、在线预览可伸缩放大(二)

______ Introduction ______ 前言 上一篇文章刚给大家总结完&#xff0c;关于上传头像的功能。此文章所述 主要是关于上传头像的具体流程以及如何对照片做裁剪处理&#xff0c;回调给控件显示&#xff1b;当然重中之重适配了Android高版本&#xff0c;有兴趣的大家可以去看一下…

PyQt5桌面应用开发(6):文件对话框

本文目录 PyQt5桌面应用系列介绍QFileDialog的静态接口QFileDialog的对象接口 示例结论后记 PyQt5桌面应用系列 PyQt5桌面应用开发&#xff08;1&#xff09;&#xff1a;需求分析 PyQt5桌面应用开发&#xff08;2&#xff09;&#xff1a;事件循环 PyQt5桌面应用开发&#xff…

linux安装node_exporter

下载 Download | Prometheus 解压 tar xvzf node_exporter-1.5.0.darwin-amd64.tar.gz 解压后有三个文件&#xff0c;分别是LICENSE、node_exporter、NOTICE 将node_exporter移动到/etc下 mv mode_exporter /etc/systemd/system 创建node_exporter.service文件 touch node_exp…

基于matlab模拟雷达接收机测试信号

一、前言 本例展示了如何模拟单基地脉冲雷达的接收信号以估计目标范围。单基地雷达将发射器与接收器并置。发射器产生一个脉冲&#xff0c;该脉冲击中目标并产生接收器接收的回波。通过测量回波在时间上的位置&#xff0c;我们可以估计目标的范围。 本示例重点介绍脉冲雷达系统…

【线程安全】死锁问题及解决方案

1. 什么是死锁 比如上一次讲到 synchronized 的时候&#xff0c;一个线程&#xff0c;对同一个对象连续加锁两次&#xff0c;如果出现阻塞等待&#xff0c;代表这个锁是不可重入锁&#xff0c;这样的线程&#xff0c;也就称为死锁&#xff01; 一旦程序进入死锁了就会导致线程僵…

低代码开发重要工具:JVS列表页字段样式配置说明

列表页中&#xff0c;通常存在各种各样的样式控制&#xff0c;例如字段宽度需要可调、字段的颜色根据内容变化等&#xff0c;那么我们接下来介绍下字段的样式控制的内容以及对应的效果。 1、字段样式控制配置位置 进入列表页的 数据配置界面&#xff0c;每个字段可以有独立的配…

在外远程控制我的世界服务器 - MCSM面板【端口映射】

文章目录 概述1.MCSManager 安装2.内网穿透2.1 安装cpolar内网穿透 3. 访问公网地址4.固定公网地址4.1 保留一个二级子域名4.2 配置固定二级域名4.3 访问固定公网地址 5. 设置节点公网地址6. 固定节点公网地址6.1 保留一个固定tcp地址6.2 配置固定TCP地址 转载自远程穿透文章&a…