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;}
};

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

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

相关文章

非常有用的JavaScript高阶面试技巧!

&#x1f340;一、闭包 闭包是指函数中定义的函数&#xff0c;它可以访问外部函数的变量。闭包可以用来创建私有变量和方法&#xff0c;从而保护代码不受外界干扰。 // 例1 function outerFunction() {const privateVariable "私有变量";function innerFunction()…

群狼调研(长沙学校满意度调查)开展长沙游客满意度调查

长沙&#xff0c;作为湖南省的省会&#xff0c;是一座具有悠久历史和丰富文化底蕴的城市。近年来&#xff0c;随着旅游业的快速发展&#xff0c;越来越多的游客选择来长沙旅游观光。为了了解游客的需求和期望&#xff0c;提高游客的满意度&#xff0c;进行长沙游客满意度调查显…

完全背包 动态规划 + 一维dp数组

动态规划&#xff1a;完全背包理论基础 每件商品都有无限个&#xff01;&#xff01;&#xff01; &#xff08;1&#xff09;0-1背包的核心代码 解决0-1背包问题&#xff08;方案二&#xff09;&#xff1a;一维dp数组&#xff08;滚动数组&#xff09;_呵呵哒(&#xffe3;…

【.net core】使用nssm发布WEB项目

nssm下载地址&#xff1a;NSSM - the Non-Sucking Service Manager 配置方式 修改服务在nssm工具下输入命令:nssm edit jntyjr 其中 jntyjr为添加服务时设置的Service name nssm可以设置任何以参数启动的应用程序以服务形式启动,通过设置参数内容启动服务 以上配置等同于执行…

14:00面试,14:06就出来了,这问的谁顶得住啊

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到8月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%,…

在比特币上使用可检索性证明支付存储费用

我们为用户开发了一种为云存储付费的新方法。 与亚马逊的 S3 等传统云存储相比&#xff0c;用户不必信任服务器。 我们使用比特币智能合约来确保支付取决于服务器的可检索性证明 (PoR)&#xff0c;该证明只能在数据仍然可用且需要时可以检索的情况下生成。 可检索性证明 (PoR)…

国际播客日 · 森海塞尔精选播客设备满足各类音频需求

森海塞尔精选播客设备 为庆祝今年的国际播客日,森海塞尔带来一系列适合各类需求和预算的出色音频解决方案 9月30日被定为国际播客日,至今已有九年的时间了。作为庆祝播客力量的全球性节日,国际播客日备受播客听众和创作者喜爱。播客的选择琳琅满目,从真实犯罪案件、阴谋论和名…

如何办一份有价值的企业内刊/报纸?向《华为人》学习就够了

前两天有一个朋友联系华研荟&#xff0c;说他是今年大学毕业加入了一个中型公司&#xff0c;他学的是企业管理&#xff0c;在公司人力资源部门工作。上周老板说公司要办一份自己的内刊&#xff0c;这个工作由人力资源部负责&#xff0c;而人力资源经理就把这个活交给她了。 她…

springcloud:三、ribbon负载均衡原理+调整策略+饥饿加载

Ribbon负载均衡原理 调整Ribbon负载均衡策略 第一种会对order-service里所有的服务消费者都采用该新规则 第二种会针对order-service里某个具体的服务消费者采用该新规则 饥饿加载

混淆技术研究笔记(一)常见工具介绍

混淆技术研究笔记包含多篇内容&#xff0c;记录了一次混淆的研究和应用的过程。 本文首发于 CSDN&#xff0c;随后会发布在 MyBatis 微信公众号&#xff0c;通过公众号可以免费阅读。 最近有一个 Java 的底层框架需要进行混淆&#xff08;从原始的 Java 项目改造为了 Maven 多模…

logback.xml springboot 项目通用logback配置,粘贴即用,按日期生成

<configuration scan"false" scanPeriod"10 seconds"><!-- 定义日志存放的根目录 --><property name"log.dir" value"./logs" /><!-- 彩色日志依赖的渲染类 --><conversionRule conversionWord"clr&q…

究竟是什么样的讲解二分查找算法的博客让我写了三小时???

版本说明 当前版本号[20230926]。 版本修改说明20230926初版 目录 文章目录 版本说明目录二分查找基础版算法描述分步演示情况一&#xff1a;能在有序数组找到待查值情况二&#xff1a;不能在有序数组找到待查值 翻译成代码基础版代码&#xff08;包括测试类&#xff09;疑惑…

MySQL 事件

文章目录 1.简介2.事件调度器3.创建事件4.查看事件5.修改事件6.删除事件参考文献 1.简介 MySQL 事件&#xff08;Event&#xff09;事件是根据时间表运行的任务&#xff0c;类似于 Unix crontab 和 Windows 定时任务。 一个事件可调用一次&#xff0c;也可周期性地启动。它由…

分布式微服务架构中的关键技术解析

分布式微服务架构是构建现代应用的理想选择&#xff0c;它将复杂系统拆分成小而自治的服务&#xff0c;每个服务都能独立开发、测试和部署。在实际的开发过程中&#xff0c;如何实现高效的分布式微服务架构呢&#xff1f;下面笔者根据自己多年的实战经验&#xff0c;浅谈实战过…

【C++ Efficiency】使用运算符的复合形式取代其单独形式,效率更高

//单独形式 x x y; x x - y; //也可以写为复合形式 x y; x - y;效率问题 一般而言&#xff0c;复合操作符比其对应的单独形式效率高&#xff1a;因为单独形式需要返回一个新的对象&#xff0c;就会产生一个临时对象的构造和析构成本&#xff0c;复合版本则是直接写入左…

【微信小程序】全局配置

1.全局配置文件及常用的配置项 Window 1&#xff09;小程序窗口的组成部分 2&#xff09;window结点常用的配置项 3&#xff09;设置导航栏的标题 4&#xff09;设置导航栏的背景色 这个颜色仅支持“#”开头的十六进制颜色&#xff0c;不能直接使用如&#xff1a;red&#x…

暗猝灭剂BHQ-1 NHS,916753-61-2,BHQ-1 SE

产品简介&#xff1a;黑洞猝灭剂-1&#xff08;BHQ-1&#xff09;被归类为暗猝灭剂&#xff08;一种非荧光发色团&#xff09;&#xff0c;被广泛用作各种荧光共振、能量转移&#xff08;FRET&#xff09;和DNA检测探针中&#xff0c;此类探针主要用于核酸分析及核酸结构研究。…

酒店预订小程序制作详细步骤解析

" 随着移动设备的普及和互联网技术的不断发展&#xff0c;小程序成为了一个备受关注的应用领域。特别是在酒店预订行业&#xff0c;小程序可以为酒店带来更多的客源和方便快捷的预订服务。下面是酒店预订小程序的制作详细步骤解析。 第一步&#xff1a;注册登录【乔拓云】…

openvino 将onnx转为IR并进行int8量化

openvino 将onnx转为IR并进行int8量化 环境安装环境编译 mo下载 openvino编译 mo onnx 转为 IRIR 模型量化为 int8参考 环境 - Ubuntu 22.04 - python 3.10安装环境 sudo apt-get update sudo apt-get upgrade sudo apt-get install python3-venv build-essential python3-de…

Vue+ElementUI实现动态树和表格数据的查询

目录 前言 一、动态树的实现 1.数据表 2.编写后端controller层 3.定义前端发送请求路径 4.前端左侧动态树的编写 4.1.发送请求获取数据 4.2.遍历左侧菜单 5.实现左侧菜单点击展示右边内容 5.1.定义组件 5.2.定义组件与路由的对应关系 5.3.渲染组件内容 5.4.通过动态…