当前位置: 首页 > news >正文

Leetcode.2522 将字符串分割成值不超过 K 的子字符串

题目链接

Leetcode.2522 将字符串分割成值不超过 K 的子字符串 rating : 1605

题目描述

给你一个字符串 s s s ,它每一位都是 1 1 1 9 9 9 之间的数字组成,同时给你一个整数 k k k

如果一个字符串 s s s 的分割满足以下条件,我们称它是一个 分割:

  • s s s 中每个数位 恰好 属于一个子字符串。
  • 每个子字符串的值都小于等于 k k k

请你返回 s s s 所有的 分割中,子字符串的 最少 数目。如果不存在 s s s 分割,返回 − 1 -1 1

注意:

  • 一个字符串的 是这个字符串对应的整数。比方说,"123" 的值为 $1234 ,"1" 的值是 1 1 1
  • 子字符串 是字符串中一段连续的字符序列。
示例 1:

输入:s = “165462”, k = 60
输出:4
解释:我们将字符串分割成子字符串 “16” ,“54” ,“6” 和 “2” 。每个子字符串的值都小于等于 k = 60 。
不存在小于 4 个子字符串的好分割。

示例 2:

输入:s = “238182”, k = 5
输出:-1
解释:这个字符串不存在好分割。

提示:
  • 1 ≤ s . l e n g t h ≤ 1 0 5 1 \leq s.length \leq 10^5 1s.length105
  • s [ i ] s[i] s[i]'1''9' 之间的数字。
  • 1 ≤ k ≤ 1 0 9 1 \leq k \leq 10^9 1k109

解法一 : 动态规划

我们定义 f ( i ) f(i) f(i) s s s 的前 i i i 个字符中,好分割的最少个数。按照定义,最终我们返回的答案就是 f ( n ) f(n) f(n)

那么我们很容易就能得出状态转移方程:

f [ j ] = m a x ( f [ j ] , f [ i ] + 1 ) ( s [ i + 1 , j ] ≤ k , i < j ) f[j] = max(f[j] , f[i] + 1) \qquad (s[i + 1,j] \leq k , i < j) f[j]=max(f[j],f[i]+1)(s[i+1,j]k,i<j)

由于 k ≤ 1 0 9 k \leq 10^9 k109,所以 j − i j - i ji 最大就是 9 9 9

时间复杂度: O ( n × 9 ) O(n \times 9) O(n×9)

C++代码:

class Solution {
public:int minimumPartition(string s, int k) {int n = s.size();vector<int> f(n + 1,1e9);f[0] = 0;for(int i = 0;i <= n;i++){int len = min(n , i + 9) , sum = 0;for(int j = i + 1;j <= len;j++){sum = sum * 10 + (s[j - 1] - '0');if(sum > k) break;f[j] = min(f[i] + 1 , f[j]);}}//for(int i = 1;i <= n;i++) cout<<f[i]<<" ";return f[n] == 1e9 ? -1 : f[n];}
};

解法二:贪心

我们每次分割的时候,让 好分割 尽可能的大,剩下的子串就更少,所能得到的 好分割 也就越少。

所以贪心策略就是,每次分割的时候让 好分割 尽可能地大,这样最终的答案就是最少的。

时间复杂度: O ( n ) O(n) O(n)

C++代码:

using LL = long long;class Solution {
public:int minimumPartition(string s, int k) {int n = s.size() , ans = 0;for(int i = 0;i < n;i++){//可能会溢出 所以要用 long longLL sum = 0;int j = i;for(;j < n;j++){if((s[j] - '0') > k) return -1;sum = sum * 10 + (s[j] - '0');if(sum > k) break;}ans++;i = j - 1;}return ans;}
};

相关文章:

Leetcode.2522 将字符串分割成值不超过 K 的子字符串

题目链接 Leetcode.2522 将字符串分割成值不超过 K 的子字符串 rating : 1605 题目描述 给你一个字符串 s s s &#xff0c;它每一位都是 1 1 1 到 9 9 9 之间的数字组成&#xff0c;同时给你一个整数 k k k 。 如果一个字符串 s s s 的分割满足以下条件&#xff0c;我们…...

成绩分析(蓝桥杯)

成绩分析 题目描述 小蓝给学生们组织了一场考试&#xff0c;卷面总分为 100 分&#xff0c;每个学生的得分都是一个 0 到 100 的整数。 请计算这次考试的最高分、最低分和平均分。 输入描述 输入的第一行包含一个整数 n (1≤n≤104 )&#xff0c;表示考试人数。 接下来 n 行…...

【多思路附源码持续更新】2023年华为杯(中国研究生数学建模)竞赛C题

赛题 若官网拥挤&#xff0c;数据集和赛题下载地址如下&#xff1a; https://download.csdn.net/download/weixin_47723732/88364777 历届优秀论文下载地址&#xff0c;可以做参考文章 https://download.csdn.net/download/weixin_47723732/88365222 论文万能模板下载地址 htt…...

基于STM32设计的校园一卡通(设计配套的手机APP)

一、功能介绍 【1】项目介绍 随着信息技术的不断发展,校园一卡通作为一种高效便捷的管理方式,已经得到了广泛的应用。而其核心部件——智能卡也被越来越多的使用者所熟知。 本文介绍的项目是基于STM32设计的校园一卡通消费系统,通过RC522模块实现对IC卡的读写操作,利用2…...

有了Spring为什么还需要SpringBoot呢

目录 一、Spring缺点分析 二、什么是Spring Boot 三、Spring Boot的核心功能 3.1 起步依赖 3.2 自动装配 一、Spring缺点分析 1. 配置文件和依赖太多了&#xff01;&#xff01;&#xff01; spring是一个非常优秀的轻量级框架&#xff0c;以IOC&#xff08;控制反转&…...

【记录】Python 之于 C/C++ 区别

记录本人在 Python 上经常写错的一些地方&#xff08;C/C 写多了&#xff0c;再写 Python 有点切换不过来&#xff09; 逻辑判断符号用 and、or、!可以直接 10 < num < 30 比较大小分支语句&#xff1a;if、elif、else使用 、-&#xff0c;Python 中不支持 、- - 这两个…...

【Vue-Element-Admin】dialog关闭回调事件

背景 点击导入按钮&#xff0c;调出导入弹窗&#xff0c;解析excel数据后&#xff0c;不点击【确认并导入】按钮&#xff0c;直接关闭弹窗&#xff0c;数据违背清理 实现 使用dialog的close回调函数&#xff0c;在el-dialog添加close&#xff0c;在methods中定义closeDialog…...

Ansible自动化:简化你的运维任务

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…...

webpack配置alias后eslint和ts无法识别

背景 我们在 webpack 配置 alias 后&#xff0c;发现项目中引入的时候&#xff0c;还是会报错&#xff0c;如下&#xff1a; 可以看到&#xff0c;有一个是 ts报错&#xff0c;还有一个是 eslint 报错。 解决 ts 报错 tsconfig.json {"compilerOptions": {...&q…...

小程序从无到有教学教程-- 01.重置华为云服务器Huawei Cloud EulerOS 2.0版本并且设置安全组

概述 专门拿了专栏来讲解&#xff0c;所以目录结构就比较简单了 文章目录 概述修改华为云操作系统选择Huawei Cloud EulerOS 2.0 镜像顺便配置华为安全组 修改华为云操作系统 这里选择华为最新的系统&#xff0c;不过也就2.0~ 选择Huawei Cloud EulerOS 2.0 镜像 这里记住密…...

js实现短信验证码一键登录

前言 短信验证码一键登录是一种方便快捷的登录方式&#xff0c;用户只需输入手机号码&#xff0c;然后接收到手机短信验证码并自动填入验证码框&#xff0c;即可完成登录操作。本文将介绍短信验证码一键登录的原理&#xff0c;并给出一个简单的示例说明。 短信验证码一键登录…...

vue2的基础知识巩固

一、定义&#xff1a;是一个渐进式的JavaScript框架 二、特点&#xff1a; 减少了大量的DOM操作编写 &#xff0c;可以更专注于逻辑操作分离数据和界面的呈现&#xff0c;降低了代码耦合度(前端端分离)支持组件化开发&#xff0c;更利于中大型项目的代码组织 vue2核心功能&a…...

echart离线地图下载地址

链接: 离线地图地址 https://datav.aliyun.com/portal/school/atlas/area_selector...

elk日志某个时间节点突然搜索不到了

elk日志某个时间节点突然搜索不到了,检查filebeat正常 Kibana手动上传数据: 响应: Error: Validation Failed: 1: this action would add [2] total shards, but this cluster currently has [2000]/[2000] maximum shards open 原因:ElasticSearch总分片数量导致的异常,ES…...

dbeaver 导出的sql文件,恢复数据库报错,Unknown command ‘\‘‘.

这是因为编码格式错误导致的&#xff0c; 加上这个即可 &#xff08;注意前后不能有空格&#xff09; --default-character-setutf8mb4...

Android.bp常用语法和预定义属性

介绍 Android.bp是Android构建系统中用于定义模块和构建规则的配置文件&#xff0c;它使用一种简单的声明式语法。以下是Android.bp的一些常见语法规则和约定&#xff1a; 注释&#xff1a; 单行注释使用//符号。 多行注释使用/和/包围。 和go语言相同 // 这是单行注释 /* 这是…...

close和fclose

在Linux系统中&#xff0c;close函数并不会主动调用fsync接口。close函数只是关闭了文件描述符&#xff0c;而不保证数据被写入到磁盘。如果你想确保数据被写入到磁盘&#xff0c;你需要在close函数之前调用fsync函数。这是因为Linux使用了缓存机制来提高磁盘的读写性能&#x…...

在已知的二维坐标里找到最接近的点

一、业务场景 最近在研发的项目&#xff0c;在做可视化层&#xff0c;在全球地图上&#xff0c;对我们的国家的陆地地图经纬度按照步长为1的间隔做了二维处理。在得到一组整数的点位信息后&#xff0c;需要将我们已有的数据库数据(业务项目)按照地址的经纬度&#xff0c;映射到…...

spring boot 八、 sharding-jdbc 分库分表 按月分表

在项目resources目录下新建com.jianmu.config.sharding.DateShardingAlgorithm 文件 新增yaml配置 数据源 spring:shardingsphere:props:sql:#是否在日志中打印 SQLshow: true#打印简单风格的 SQLsimple: truedatasource:names: pingxuanlogpingxuanlog:type: com.alibaba.dru…...

Java 8 中Stream流的一些用法

public class Djmxlist {private String dxmc;private Integer sl;public String getDxmc() {return dxmc;}public void setDxmc(String dxmc) {this.dxmc dxmc;}public Integer getSl() {return sl;}public void setSl(Integer sl) {this.sl sl;} }插入一下数据 List<Djm…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...