【力扣周赛】第348场周赛

news2024/12/23 17:53:17

【力扣周赛】第348场周赛

    • 2716. 最小化字符串长度
      • 题目描述
      • 解题思路
    • 2717. 半有序排列
      • 题目描述
      • 解题思路
    • 2718. 查询后矩阵的和
      • 题目描述
      • 解题思路
    • 2719. 统计整数数目
      • 题目描述
      • 解题思路

2716. 最小化字符串长度

题目描述

描述:给你一个下标从 0 开始的字符串 s ,重复执行下述操作 任意 次:

在字符串中选出一个下标 i ,并使 c 为字符串下标 i 处的字符。并在 i 左侧(如果有)和 右侧(如果有)各 删除 一个距离 i 最近 的字符 c 。
请你通过执行上述操作任意次,使 s 的长度 最小化 。

返回一个表示 最小化 字符串的长度的整数。

示例 1:

输入:s = "aaabc"
输出:3
解释:在这个示例中,s 等于 "aaabc" 。我们可以选择位于下标 1 处的字符 'a' 开始。接着删除下标 1 左侧最近的那个 'a'(位于下标 0)以及下标 1 右侧最近的那个 'a'(位于下标 2)。执行操作后,字符串变为 "abc" 。继续对字符串执行任何操作都不会改变其长度。因此,最小化字符串的长度是 3 。

示例 2:

输入:s = "cbbd"
输出:3
解释:我们可以选择位于下标 1 处的字符 'b' 开始。下标 1 左侧不存在字符 'b' ,但右侧存在一个字符 'b'(位于下标 2),所以会删除位于下标 2 的字符 'b' 。执行操作后,字符串变为 "cbd" 。继续对字符串执行任何操作都不会改变其长度。因此,最小化字符串的长度是 3 。

示例 3:

输入:s = "dddaaa"
输出:2
解释:我们可以选择位于下标 1 处的字符 'd' 开始。接着删除下标 1 左侧最近的那个 'd'(位于下标 0)以及下标 1 右侧最近的那个 'd'(位于下标 2)。执行操作后,字符串变为 "daaa" 。继续对新字符串执行操作,可以选择位于下标 2 的字符 'a' 。接着删除下标 2 左侧最近的那个 'a'(位于下标 1)以及下标 2 右侧最近的那个 'a'(位于下标 3)。执行操作后,字符串变为 "da" 。继续对字符串执行任何操作都不会改变其长度。因此,最小化字符串的长度是 2 。

提示:

1 <= s.length <= 100
s 仅由小写英文字母组成

解题思路

难度:简单。

思路:最直观的想法是,虽然题目描述这么复杂,但是本质上是求字符串中不重复的字符数。使用set即可。

int minimizedStringLength(string s) {
        int n=s.size();
        unordered_set<char> ump;
        for(int i=0;i<n;i++)
        {
            if(ump.count(s[i])==0)
                ump.emplace(s[i]);
        }
        return ump.size();
    }

总结:有时候题目描述较长不要害怕,不要被题目所迷惑,换个角度思考。

2717. 半有序排列

题目描述

描述:给你一个下标从 0 开始、长度为 n 的整数排列 nums 。

如果排列的第一个数字等于 1 且最后一个数字等于 n ,则称其为 半有序排列 。你可以执行多次下述操作,直到将 nums 变成一个 半有序排列 :

选择 nums 中相邻的两个元素,然后交换它们。
返回使 nums 变成 半有序排列 所需的最小操作次数。

排列 是一个长度为 n 的整数序列,其中包含从 1 到 n 的每个数字恰好一次。

示例 1:

输入:nums = [2,1,4,3]
输出:2
解释:可以依次执行下述操作得到半有序排列:
1 - 交换下标 0 和下标 1 对应元素。排列变为 [1,2,4,3] 。
2 - 交换下标 2 和下标 3 对应元素。排列变为 [1,2,3,4] 。
可以证明,要让 nums 成为半有序排列,不存在执行操作少于 2 次的方案。

示例 2:

输入:nums = [2,4,1,3]
输出:3
解释:
可以依次执行下述操作得到半有序排列:
1 - 交换下标 1 和下标 2 对应元素。排列变为 [2,1,4,3] 。
2 - 交换下标 0 和下标 1 对应元素。排列变为 [1,2,4,3] 。
3 - 交换下标 2 和下标 3 对应元素。排列变为 [1,2,3,4] 。
可以证明,要让 nums 成为半有序排列,不存在执行操作少于 3 次的方案。

示例 3:

输入:nums = [1,3,4,2,5]
输出:0
解释:这个排列已经是一个半有序排列,无需执行任何操作。

提示:

2 <= nums.length == n <= 50
1 <= nums[i] <= 50
nums 是一个 排列

解题思路

难度:简单。

思路:最直观的想法是,假设1的下标为p,n的下标为q,那么就分为两种情况。第一种是p<q,那么p移动到0,q移动到n-1,总共(p-0)+(n-1-q);第二种是p>q,那么p和q交换,一共2*(p-q)-1,p再移动到0,q再移动到n-1,相当于原本的p移动到n-1和q移动到0,一共(n-1-p)+(q-0)+2*(p-q)-1。

int semiOrderedPermutation(vector<int>& nums) 
{
   int n=nums.size();
   //已经是一个半有序排列
   if(nums[0]==1&&nums[n-1]==n)
     return 0;
   int imin,imax;
   int res=0;
   for(int i=0;i<n;i++)
   {
      if(nums[i]==1)
        imin=i;
      else if(nums[i]==n)
        imax=i;
   }
   if(imax>imin)
     res=(n-1-imax)+(imin-0);
   else //中间是排列数
     res=(n-1-imin)+(imax-0)+2*(imin-imax)-1;
   return res;
}

总结:当时临场想到的嘿嘿嘿!!!厉害基拉!!!

2718. 查询后矩阵的和

题目描述

描述:给你一个整数 n 和一个下标从 0 开始的 二维数组 queries ,其中 queries[i] = [typei, indexi, vali] 。

一开始,给你一个下标从 0 开始的 n x n 矩阵,所有元素均为 0 。每一个查询,你需要执行以下操作之一:

如果 typei == 0 ,将第 indexi 行的元素全部修改为 vali ,覆盖任何之前的值。
如果 typei == 1 ,将第 indexi 列的元素全部修改为 vali ,覆盖任何之前的值。
请你执行完所有查询以后,返回矩阵中所有整数的和。

示例 1:

在这里插入图片描述

输入:n = 3, queries = [[0,0,1],[1,2,2],[0,2,3],[1,0,4]]
输出:23
解释:上图展示了每个查询以后矩阵的值。所有操作执行完以后,矩阵元素之和为 23 。

示例 2:

在这里插入图片描述

输入:n = 3, queries = [[0,0,4],[0,1,2],[1,0,1],[0,2,3],[1,2,1]]
输出:17
解释:上图展示了每一个查询操作之后的矩阵。所有操作执行完以后,矩阵元素之和为 17 。

提示:

1 <= n <= 104
1 <= queries.length <= 5 * 104
queries[i].length == 3
0 <= typei <= 1
0 <= indexi < n
0 <= vali <= 105

解题思路

2719. 统计整数数目

题目描述

描述:给你两个数字字符串 num1 和 num2 ,以及两个整数 max_sum 和 min_sum 。如果一个整数 x 满足以下条件,我们称它是一个好整数:

num1 <= x <= num2
min_sum <= digit_sum(x) <= max_sum.
请你返回好整数的数目。答案可能很大,请返回答案对 109 + 7 取余后的结果。

注意,digit_sum(x) 表示 x 各位数字之和。

示例 1:

输入:num1 = "1", num2 = "12", min_num = 1, max_num = 8
输出:11
解释:总共有 11 个整数的数位和在 1 到 8 之间,分别是 1,2,3,4,5,6,7,8,10,11 和 12 。所以我们返回 11 。

示例 2:

输入:num1 = "1", num2 = "5", min_num = 1, max_num = 5
输出:5
解释:数位和在 1 到 5 之间的 5 个整数分别为 1,2,3,4 和 5 。所以我们返回 5 。

提示:

1 <= num1 <= num2 <= 1022
1 <= min_sum <= max_sum <= 400

解题思路

难度:难。

思路:最直观的想法是,数位DP模板。

const int MOD=1e9+7;
int f(string s,int min_sum,int max_sum)
{
   int n=s.length();
   //截止每一位的sum
   int memo[n][min(9*n,max_sum)+1];
   memset(memo,-1,sizeof(memo));
   //前导0无影响 012和12和一样
   function<int(int,int,bool)> f=[&](int i,int sum,bool is_limit)->int
   {
      if(sum>max_sum) return 0;
      if(i==n) return sum>=min_sum;
      if(!is_limit&&memo[i][sum]!=-1)
        return memo[i][sum];
      int res=0;
      int up=is_limit?s[i]-'0':9;
      for(int d=0;d<=up;d++)
        res=(res+f(i+1,sum+d,is_limit&&d==up))%MOD;
      if(!is_limit)
        memo[i][sum]=res;
      return res;
    };
    return f(0,0,true);
}
int count(string num1, string num2, int min_sum, int max_sum) 
{
   //计算<=num2的合法数字个数a
   //计算<=num1-1的合法数字个数b
   //那么答案就是a-b
   //考虑到num1是一个字符串 故可直接计算<=num1的合法数字个数 再单独判断num1这个数是否合法
   int ans=f(num2,min_sum,max_sum)-f(num1,min_sum,max_sum)+MOD;  //+MOD避免负数 取模后大小不一定
   int sum=0; 
   for(char c:num1)
     sum+=c-'0';
   ans+=min_sum<=sum&&sum<=max_sum;
   return ans%MOD;
}

总结:数位DP还不太熟练,继续加油~~~

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

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

相关文章

30个接口自动化测试面试题,看过的已经在上班了

1. 什么是接口自动化测试&#xff1f; 答&#xff1a;接口自动化测试是指使用自动化工具对接口进行测试&#xff0c;验证接口的正确性、稳定性和性能等方面的指标。2. 为什么要进行接口自动化测试&#xff1f; 答&#xff1a;接口自动化测试可以提高测试效率&#xff0c;减少人…

STM32 实现简单定时任务调度器,动态创建任务,两种思路实现跑马灯

代码实现和硬件没关系&#xff0c;所以并不限于STM32&#xff0c;Arduino 之类的其他地方也能用&#xff0c;只要有一个能获取时间的函数就行&#xff0c;或者说&#xff0c;只要有一个会随着时间自动增加的变量就行&#xff0c;时间单位无所谓&#xff0c;所以确实想的话&…

地图实火!断货加印,限时折扣抢购通道开启

&#xff08;关注公众号点击图片三折购买《社交泛娱乐出海作战地图》&#xff09; 实火&#xff01; 融云自制《社交泛娱乐出海作战地图》 “WICC 泛娱乐出海嘉年华”最热单品 关注【融云全球互联网通信云】了解更多 《出海作战地图》线下首发立刻引爆现场&#xff0c;“如…

分布式数据库-事务一致性

version: v-2023060601 author: 路__ 一、什么是“强一致性” 分布式数据库的“强一致性”应该包含两个方面&#xff1a;serializability&#xff08;串行&#xff09; and linearizability&#xff08;线性一致&#xff09;&#xff0c;上述图为“Highly Available Transact…

Tomcat优化与动静分离

Tomcat优化 一、Tomcat配置文件参数优化二、负载均衡&#xff0c;动静分离七层代理配置四层代理配置 Tomcat 默认安装下的缺省配置并不适合生产环境&#xff0c;它会频繁出现假死现象需要重启&#xff0c;只有通过不断压测优化才能让它最高效率稳定的运行。优化主要包括三方面&…

二、tienchin健身系统技术点复现-注解限流

二、tienchin健身系统技术点复现-注解限流 在上一章节写到编写 lua 脚本。基本的配置类都已经创建&#xff0c;下面创建一个 请求获取IP的工具类和全局异常处理即可。 1、创建工具类IpUtils package com.yangjiapo.rate_limiter.utils;import javax.servlet.http.HttpServlet…

Spark RDD实现分组排行榜

文章目录 一&#xff0c;提出任务二&#xff0c;实现思路三&#xff0c;准备工作1、在本地创建成绩文件2、将成绩文件上传到HDFS上指定目录 四&#xff0c;完成任务1、在Spark Shell里完成任务&#xff08;1&#xff09;读取成绩文件得到RDD&#xff08;2&#xff09;利用映射算…

kafka系统的架构

系统的架构 主题topic和分区partition topic Kafka中存储数据的逻辑分类&#xff1b;你可以理解为数据库中“表”的概念&#xff1b; 比如&#xff0c;将app端日志、微信小程序端日志、业务库订单表数据分别放入不同的topic partition分区&#xff08;提升kafka吞吐量&#…

有以下类定义,写出该类的构造函数,析构函数,拷贝构造函数,要求,所有类对象的空间都是用new动态申请。

有以下类定义&#xff0c;写出该类的构造函数&#xff0c;析构函数&#xff0c;拷贝构造函数&#xff0c;要求&#xff0c;所有类对象的空间都是用new动态申请。 class Stu {string name;int age;int score;int *high; }; #include <iostream> using namespace std; clas…

XSS-labs靶场通关

目录 level 1 ​level 2 level 3 level 4 level 5 level 6 level 7 level 8 level 9 level 10 level 11 level 12 level 13 level 14 level 15 level 16 level 17 level 18 今天就要开始打xss-labs靶场了&#xff0c;点击图片开始吧 level 1 查看源码发现没…

Android系统的Ashmem匿名共享内存子系统分析(3)- Ashmem子系统的 C/C++访问接口

声明 其实对于Android系统的Ashmem匿名共享内存系统早就有分析的想法&#xff0c;记得2019年6、7月份Mr.Deng离职期间约定一起对其进行研究的&#xff0c;但因为我个人问题没能实施这个计划&#xff0c;留下些许遗憾…文中参考了很多书籍及博客内容&#xff0c;可能涉及的比较…

基于深度学习的高精度人体摔倒行为检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度人体摔倒行为检测识别系统可用于日常生活中或野外来检测与定位人体摔倒行为目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的人体摔倒行为目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系…

前端学习--Vue3.0(1)

1使用create-vue搭建Vue3项目 1.1 认识create-vue create-vue是Vue官方新的脚手架工具&#xff0c;底层切换到了 vite&#xff08;下一代前端工具链&#xff09;&#xff0c;为开发提供极速响应 create-vue基于vite vue-cli基于webpack 1.2 创建项目 需要16.0及以上的node.j…

机器学习笔记:深度学习模型复杂度

1 时间复杂度&#xff08;模型运算次数&#xff09; 决定了模型的训练/预测时间用FLOPs指代 机器学习笔记&#xff1a;FLOPs_flop 机器学习_UQI-LIUWJ的博客-CSDN博客 2 空间复杂度&#xff08;模型参数数量&#xff09; 决定了模型的参数数量 2.1 全连接层参数量 包含bias…

EBU6304 Software Engineering 知识点总结_6 项目管理_下 Design Patterns

Design Patterns Decorator Design pattern 用于扩展系统功能的装饰模式。 比如我们有一个鸭子类&#xff0c;可以调用其鸭子叫的方法。我们初始化了一个鸭子对象&#xff0c;如何统计这个对象叫了几次&#xff0c;也就是其鸭子叫方法被调用了几次&#xff1f;记住OCP原则不…

mysql 在 linux下的安装 和 配置

文章目录 1. linux 安装mysql1. 源码安装1.找到源码包2&#xff1a; 进行配置3&#xff1a;初始化数据目录官方说明 自用4&#xff1a;启动数据库5:写入环境变量 2&#xff1a;使用yum安装1. 直接配置mysql仓库 或者下载MySQL Yum Repository2&#xff1a;安装启动进入mysql 3&…

整理推荐 6 个超好用的平面设计网站!

本文将为大家介绍了 6 个最佳学习平面设计的网站&#xff0c;包括即时设计、Behance、Awwwards、Dribbble、Designinspiration 和 Pinterest。选择学习平面设计网站需要考虑匹配自己的设计风格、是否具有局限性等&#xff0c;可以试用几个网站后选择最合适的。 1、即时设计 即…

我们投出去的简历为什么已读不回?来看面试官如何筛选简历、挑选求职者?

目录 前言&#xff1a; 应届生 1、看学历 2、看实习经历 3、看专业 职场人士 面试官喜欢问什么问题 总结 前言&#xff1a; 金三银四&#xff0c;是求职者蠢蠢欲动的季节&#xff0c;亦是企业摩拳擦掌的季节。 因为作为企业的一名金牌面试官&#xff0c;我收到的内推…

RK1126 C++ yolov5 6.2

基于 rk npu &#xff0c; 实现 yolov5 6.2 模型推理 实现过程 ⚡️​ 编译 opencv 需根据自己路径修改. cmake -D CMAKE_BUILD_TYPERELEASE \-D CMAKE_C_COMPILER./gcc-arm-8.3-2019.02-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc \-D CMAKE_CXX_COMPILER./gc…

【Linux】多线程02 --- 线程的同步互斥问题及生产消费模型

&#x1f34e;作者&#xff1a;阿润菜菜 &#x1f4d6;专栏&#xff1a;Linux系统编程 目录 一、线程互斥1. 为什么要有共享资源临界保护&#xff1f; 2.理解加锁2.1 认识锁&#xff0c;使用锁 线程同步互斥问题是指多线程程序中&#xff0c;如何保证共享资源的正确访问和线程间…