【力扣周赛】第 356 场周赛(数位DP)

news2024/9/24 5:28:44

文章目录

  • Q1:6917. 满足目标工作时长的员工数目(简单枚举模拟题)
  • Q2:6900. 统计完全子数组的数目(双指针+滑动窗口)
  • Q3:6918. 包含三个字符串的最短字符串
  • Q4:6957. 统计范围内的步进数字数目(数位DP)
  • 成绩记录![在这里插入图片描述](https://img-blog.csdnimg.cn/fb558f9ff1a54f5a9083ef4cb9a9a799.png)

Q1:6917. 满足目标工作时长的员工数目(简单枚举模拟题)

在这里插入图片描述

按题意枚举遍历一遍即可。

class Solution {
    public int numberOfEmployeesWhoMetTarget(int[] hours, int target) {
        int ans = 0;
        for (int h: hours) {
            if (h >= target) ans++;
        }
        return ans;
    }
}

Q2:6900. 统计完全子数组的数目(双指针+滑动窗口)

在这里插入图片描述

数据范围比较小只有1000,使用 O ( n 2 ) O(n^2) O(n2) 的方法估计也能过,但是这里我使用了 O ( n ) O(n) O(n) 的双指针 + 滑动窗口。

枚举的是右端点,不断尝试将左端点向右移动。
对于每个右端点,当前左指针向左的所有位置都可以作为左端点,所以 ans += l + 1。

class Solution {
    public int countCompleteSubarrays(int[] nums) {
        Set<Integer> s = new HashSet();
        for (int num: nums) s.add(num);
        
        int n = nums.length, sum = s.size(), ans = 0;
        Map<Integer, Integer> m = new HashMap();
        for (int r = 0, l = 0; r < n; ++r) {
            m.merge(nums[r], 1, Integer::sum);
            while (m.get(nums[l]) > 1) {
                m.merge(nums[l], -1, Integer::sum);
                l++;
            }
            if (m.size() == sum) ans += l + 1;
        }
        return ans;
    }
}

Q3:6918. 包含三个字符串的最短字符串

在这里插入图片描述

这题感觉是挺怪的,但是数据范围比较小,字符串的长度只有 100 ,而且只有 3 个字符串。

只有 3 个字符串意味着只有 6 种拼接可能,分别是 abc,acb,bac,bca,cab,cba。(拼接的原则是找到最长的公共前后缀)
将这 6 个字符串放入列表中,按照 长度 + 字典序排序即可。

class Solution {
    public String minimumString(String a, String b, String c) {
        List<String> ls = new ArrayList();
        ls.add(op(a, b, c));
        ls.add(op(a, c, b));
        ls.add(op(b, a, c));
        ls.add(op(b, c, a));
        ls.add(op(c, a, b));
        ls.add(op(c, b, a));
        Collections.sort(ls);
        int l = ls.get(0).length(), id = 0;
        for (int i = 1; i < 6; ++i) {
            if (ls.get(i).length() < l) {
                l = ls.get(i).length();
                id = i;
            }
        }
        return ls.get(id);
    }
    
    public String op(String a, String b, String c) {
        String ans = new String(op2(op2(a, b), c));
        return ans;
    }
    
    public String op2(String a, String b) {
        for (int i = 0; i < b.length(); ++i) {
            String t = a + b.substring(b.length() - i, b.length());
            if (t.indexOf(b) != -1) return new String(t);
        }
        return new String(a + b);
    }
}

Q4:6957. 统计范围内的步进数字数目(数位DP)

在这里插入图片描述

经典的数位DP题目,相关的链接可见:
【算法】数位DP
【算法基础:动态规划】5.4 数位统计DP(计数问题)(数位DP)

class Solution {
    char[] s;
    int[][] memo;
    final int mod = (int)1e9 + 7;
    
    public int countSteppingNumbers(String low, String high) {
        int ans = op(high) - op(low);
        if (check(low)) ans++;
        return (ans + mod) % mod;		// 不要忘了取模
    }
    
    public int op(String n) {
        s = n.toCharArray();
        int m = s.length;
        memo = new int[m][10];
        for (int i = 0; i < m; ++i) Arrays.fill(memo[i], -1);
        return f(0, true, false, -1);
    }
    
    public int f(int i, boolean isLimit, boolean isNum, int last) {
        if (i == s.length) return isNum? 1: 0;
        if (!isLimit && isNum && memo[i][last] != -1) return memo[i][last];
        
        int res = 0;
        if (!isNum) res = f(i + 1, false, false, -1) % mod;
        
        int up = isLimit? s[i] - '0': 9;
        for (int d = isNum? 0: 1; d <= up; ++d) {
            if (Math.abs(d - last) == 1 || last == -1) res = (res + f(i + 1, isLimit && d == up, true, d)) % mod;
        }
        if (!isLimit && isNum) memo[i][last] = res;
        return res;
    }
    
    // 单独检查 low 是不是步进数字
    public boolean check(String s) {
        char ch = s.charAt(0);
        for (int i = 1; i < s.length(); ++i) {
            char ch2 = s.charAt(i);
            if (ch == ch2 + 1 || ch == ch2 - 1) ch = ch2;
            else return false;
        }
        return true;
    }
}

做题的过程中一直卡样例

在这里插入图片描述
原因是 return (ans + mod) % mod; 写成了 return ans % mod;
具体来说,memo 数组里都是取模之后的数字,所以 op(high) 是可能比 op(low) 小的。

成绩记录在这里插入图片描述

在这里插入图片描述

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

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

相关文章

Vue没有node_modules怎么办

npm install 一下 然后再npm run serve 就可以运行了

AD20. 如何给元器件设计、添加3D模型

Altium Designer学习笔记 - 00.目录​​​​​​​ 零. 前言 本文以HF46F继电器为例展示设计、添加元器件3D模型的流程&#xff0c;其他元器件类似。 一. 操作步骤 从下图可以看到此时继电器还没有添加3D模型&#xff1a; 1. 获取元器件尺寸 这里通过查找元器件的数据手册可以…

el-select 无限下拉滚动加载数据

<template> <div> <el-form ref"saveParameter" :model"saveParameter" inline inline-message style"margin:10px" > <el-form-item label"供应商" prop"lngcustomerid"> <el-select v-model&q…

装饰器模式——扩展系统功能

1、简介 1.1、概述 对新房进行装修并没有改变房屋用于居住的本质&#xff0c;但它可以让房子变得更漂亮、更温馨、更实用、更能满足居家的需求。在软件设计中&#xff0c;也有一种类似新房装修的技术可以对已有对象&#xff08;新房&#xff09;的功能进行扩展&#xff08;装…

【Linux命令200例】mattrib用于更改文件或者目录的属性的工具

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;Linux命令大全。 &#x1f3c6;本专栏我们会通过具体的系统的命令讲解加上鲜活的实操案例对各个命令进行深入…

Java的标记接口(Marker Interface)

Java中的标记接口&#xff08;Marker Interface&#xff09;是一个空接口&#xff0c;接口内什么也没有定义。它标识了一种能力&#xff0c;标识继承自该接口的接口、实现了此接口的类具有某种能力。 例如&#xff0c;jdk的com.sun.org.apache.xalan.internal.xsltc.trax.Temp…

SqlServer读写分离对等发布

SqlServer读写分离对等发布: 对等发布支持多主复制。发布服务器将事务流式传输到拓扑中的所有对等方。所有对等节点可以读取和写入更改,且所有更改将传播到拓扑中的所有节点。 注意点: 1.各服务器的数据库名字要保证一样。 2.发布名称必须保持一致。 3.各服务器必须都是…

06-MySQL-基础篇-SQL之DCL语句

SQL之DCL语句 前言DCL 管理用户查询用户创建用户修改用户密码删除用户说明 权限控制常见权限描述查询权限授予权限撤销权限说明 前言 本篇来学习下SQL中的DCL语句 DCL DCL英文全称是Data Control Language(数据控制语言)&#xff0c;用来管理数据库用户、控制数据库的访问权…

【VSCode部署模型】导出TensorFlow2.X训练好的模型信息

参考tensorflow2.0 C加载python训练保存的pb模型 经过模型训练及保存&#xff0c;我们得到“OptimalModelDataSet2”文件夹&#xff0c;模型的保存方法(.h5或.pb文件)&#xff0c;参考【Visual Studio Code】c/c部署tensorflow训练的模型 其中“OptimalModelDataSet2”文件夹保…

测试测试用例方法篇

测试|测试用例方法篇 文章目录 测试|测试用例方法篇1.测试用例的基本要素&#xff1a;测试环境&#xff0c;操作步骤&#xff0c;测试数据&#xff0c;预期结果…2.测试用例带来的好处3.测试用例的设计思路&#xff0c;设计方法&#xff0c;具体设计方法之间的关系**设计测试用…

Zabbix监控ActiveMQ

当我们在线上使用了ActiveMQ 后&#xff0c;我们需要对一些参数进行监控&#xff0c;比如 消息是否有阻塞&#xff0c;哪个消息队列阻塞了&#xff0c;总的消息数是多少等等。下面我们就通过 Zabbix 结合 Python 脚本来实现对 ActiveMQ的监控。 一、创建 Activemq Python 监控…

springboot创建并配置环境(四) - 配置扩展属性(下集)

文章目录 一、介绍二、对contributors中的配置属性进行处理三、处理contributors中的配置属性1. 解析配置文件位置和资源2. 加载配置属性 四、确定当前运行环境激活的profile1. 获取附加的addtionalProfiles2. 获取spring.profiles.include定义的配置3. 获取spring.profiles.ac…

互斥量 的初识

Q: 什么是互斥量&#xff1f; A: 在多数情况下&#xff0c;互斥型信号量和二值型信号量非常相似&#xff0c;但是从功能上二值型信号量用于同步&#xff0c; 而互斥型信号量用于资源保护。 互斥型信号量和二值型信号量还有一个最大的区别&#xff0c;互斥型信号量可以有效解决…

CAD .NET 15.0 企业版 Crack

CAD .NET 15.0 企业版 企业版 企业版 企业版 企业版 Updated: June 14, 2023 | Version 15.0 NEW CAD .NET is a library for developing solutions in .NET environment. It supports AutoCAD DWG/ DXF, PLT and other CAD formats. The library can be used in a wide rang…

SpringBoot百货超市商城系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码 一、项目演示 项目演示地址&#xff1a; 视频地址 二、项目介绍 项目描述&#xff1a;这是一个基于SpringBoot框架开发的百货超市系统。首先&#xff0c;这是一个很适合SpringBoot初学者学习的项目&#xff0c;代…

在linux上面部署activemq

1、下载 网址&#xff1a;ActiveMQ 注意&#xff1a;新版本5.17起 要求jdk11, 5.16兼容jdk8, 所以&#xff0c;确保已经安装 java11 或以上的版本 这里安装较新版&#xff1a;5.18.2&#xff0c;已经安装了java17 如何安装jdk17,请详见我的另一篇文章&#xff1a;linux…

mermaid使用记录

记录mermaid可使用到场景&#xff0c;部分关键使用过程备忘 markdown idea开启mermaid预览 grafana 参考插件 Diagram https://grafana.com/grafana/plugins/jdbranham-diagram-panel/ 结合监控数据&#xff0c;可以展示某个处理流程中&#xff0c;各个中间环节的处理指标及…

巧用NGINX配置解决跨域问题

页面nginx配置 1&#xff0c;前端页面放在域名根目录&#xff0c;比如&#xff0c;http://www.xuecheng.com/ &#xff0c;对应的nginx配置&#xff1a; #门户location / {alias D:/Z_lhy/SpringCloud/xuecheng_online/www/xc-ui-pc-static-portal/;index index.html;} 页…

VMPWN的入门系列-2

温馨提示&#xff1a; 文章有点长&#xff0c;图片比较多&#xff0c;请耐心阅读 实验四 VMPWN4 题目简介 这道题应该算是虚拟机保护的一个变种&#xff0c;是一个解释器类型的程序&#xff0c;何为解释器&#xff1f;解释器是一种计算机程序&#xff0c;用于解释和执行源代码。…

quarkus核心编程笔记

此篇只做总结&#xff0c;有大佬做的更详细 大佬quarkus笔记 依赖注入 在应用中&#xff0c;一个接口有多个实现是很常见的&#xff0c;那么依赖注入时&#xff0c;如果类型是接口&#xff0c;如何准确选择实现呢&#xff1f; 修饰符匹配Named注解属性匹配根据优先级选择写…