LeeCode 1987 DP / Trie

题意

传送门 LeeCode 1987 不同的好子序列数目

题解
DP

令以 b [ i ] b[i] b[i]为首元素的子序列集合为 S i \mathcal{S}_{i} Si。若 b [ i ] = b [ j ] b[i]=b[j] b[i]=b[j],且 i < j i<j i<j,则 S j ⊆ S i \mathcal{S}_{j}\subseteq\mathcal{S}_{i} SjSi。令 d p [ i ] = ∣ S i ∣ dp[i]=\lvert\mathcal{S}_{i}\rvert dp[i]=Si,则枚举子序列的第二个元素 x x x进行转移,转移的位置是 b [ j ] = x , i < j b[j]=x,i<j b[j]=x,i<j的最小 j j j。总时间复杂度 O ( n ) O(n) O(n)

#include <bits/stdc++.h>
using namespace std;class Solution {public:int numberOfUniqueGoodSubsequences(string binary) {int n = binary.size();vector<vector<int>> nxt(n, vector<int>(2));vector<int> lst(2, -1);for (int i = n - 1; i >= 0; --i) {nxt[i] = lst;lst[binary[i] - '0'] = i;}vector<int> dp(n, -1);const int mod = 1e9 + 7;auto add = [&](int &x, int y) {x += y;if (x >= mod) {x -= mod;}};for (int i = n - 1; i >= 0; --i) {dp[i] = 1;for (int j = 0; j < 2; ++j) {if (nxt[i][j] != -1) {add(dp[i], dp[nxt[i][j]]);}}}int res = 0;if (lst[0] != -1) {res = 1;}if(lst[1] != -1) add(res, dp[lst[1]]);return res;}
};
Trie

用Trie维护子序列集合,树中每一个节点代表一个互异的子序列。维护Trie中子树数量小于2的节点数量,不断插入新元素,同时将新增的树节点计入答案。总时间复杂度 O ( n ) O(n) O(n)

#include <bits/stdc++.h>
using namespace std;class Solution {public:int numberOfUniqueGoodSubsequences(string binary) {const int mod = 1e9 + 7;auto add = [&](int &x, int y) {x += y;if (x >= mod) {x -= mod;}};int zero = 0;for (auto c : binary) {if (c == '0') {zero = 1;}}int p = 0;int n = binary.size();while (p < n && binary[p] == '0') {p += 1;}int res = zero;if (p < n) {vector<int> a{1, 0, 0};res += 1;p += 1;for (int i = p; i < n; ++i) {int x = binary[i] - '0';vector<int> tmp(3);add(tmp[0], a[0]);add(tmp[0], a[1 << (x ^ 1)]);add(res, tmp[0]);add(tmp[1 << x], a[0]);add(tmp[1 << x], a[1 << x]);swap(tmp, a);}}return res;}
};

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

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

相关文章

论文学习记录

目录标题 pcl下载pcl安装学习地址问题[vtkOpenGLPolyDataMapper::SetVertexShaderCode was deprecated for VTK 9.0 and will be removed in a future version. Use vtkOpenGLShaderProperty::SetVertexShaderCode instead.](https://blog.csdn.net/qq_39784672/article/detail…

Cesium4Unreal - # 011 加载显示geojson

文章目录 加载显示geojson1 思路2 步骤2.1 添加依赖模块2.3 创建Actor2.3.1 <font color=#4ea1db>MyGeoJsonLoaderActor.h2.3.2 <font color=#4ea1db>MyGeoJsonLoaderActor.cpp2.3 蓝图代码3 资源加载显示geojson 1 思路 在Unreal Engine中加载显示geojson和加载…

服务和协议的关系?

文章目录 前言一、协议协议有三个要素:二、服务三、服务与协议的区别:前言 前文介绍了很多UDS服务和ISO 14229协议的文章,有读者会有疑问服务和协议的关系到底是什么呢? ISO14229系列规范介绍 UDS服务列表 本文小编将展开介绍。 一、协议 为进行网络中的数据交换而建立的…

MySQL学习笔记-进阶篇-SQL优化

SQL优化 插入数据 insert优化 1&#xff09;批量插入 insert into tb_user values(1,Tom),(2,Cat),(3,Jerry); 2&#xff09;手动提交事务 mysql 默认是自动提交事务&#xff0c;这样会导致频繁的开启和提交事务&#xff0c;影响性能 start transaction insert into tb_us…

Mongodb学习

mongodb应用场景&#xff1a; mongodb特点&#xff1a;高扩展性&#xff08;分片水平扩展&#xff09;、高可用&#xff0c;对事务性要求不高、应用需要大量的地理位置查询、文本查询 mongodb部署架构&#xff1a;副本集、分片集群 MongoDB 是一个开源、高性能、无模式的文档…

【最新鸿蒙应用开发】——警惕这些坑!不同API版本带来的差异

关于HarmonyOS的API从8到API12&#xff0c;存在不少版本的差异&#xff0c;比如一些ArkTS语法上的差异&#xff1b;一些组件在API9之前不支持的功能&#xff0c;本人在项目开发过程中也是踩了不少坑&#xff0c;现在给大家分享一下心得。 1.语法差异 首先是ArkTS语法上的差异…

实拆一个风扇

fr:徐海涛(hunkxu)

Qwen2——阿里巴巴最新的多语言模型挑战 Llama 3 等 SOTA

引言 经过几个月的期待&#xff0c; 阿里巴巴 Qwen 团队终于发布了 Qwen2 – 他们强大的语言模型系列的下一代发展。 Qwen2 代表了一次重大飞跃&#xff0c;拥有尖端的进步&#xff0c;有可能将其定位为 Meta 著名的最佳替代品 骆驼3 模型。在本次技术深入探讨中&#xff0c;我…

神经网络学习2

张量&#xff08;Tensor&#xff09;是深度学习和科学计算中的基本数据结构&#xff0c;用于表示多维数组。张量可以看作是一个更广义的概念&#xff0c;涵盖了标量、向量、矩阵以及更高维度的数据结构。具体来说&#xff0c;张量的维度可以是以下几种形式&#xff1a; 标量&am…

Spring-boot-logback-spring.xml文件Appender标签下的属性

在logback-spring.xml文件中&#xff0c;标签是通过set方法设置的值&#xff0c;例如下面的代码&#xff0c;属性hrName的值为TYC&#xff0c;当服务启动的时候&#xff0c;控制台会一直打印TYC三个字母 首先&#xff0c;我们自定义一个Appender&#xff0c;然后里面有一个属性…

【打鼹鼠game】

好的&#xff0c;我将为您编写一个简单的打鼹鼠游戏的代码。这个游戏会模拟一个简单的打鼹鼠游戏&#xff0c;玩家需要点击随机出现的鼹鼠。我们将使用Python编程语言和Pygame库来创建这个游戏。代码将包括以下部分&#xff1a; 初始化Pygame和游戏窗口。创建鼹鼠的类和属性。…

python面试题4: Python是按引用调用还是按值调用(难度--简单)

文章目录 题目回答 题目 Python是按引用调用还是按值调用&#xff1f; 回答 这题主要是考试对于python数据类型的认知。 1.首先对于不可变对象&#xff0c;字符&#xff0c;元组&#xff0c;数字往往是按引用进行调用,示例如下&#xff1a; def add(s):ssodd so add(s) …

LogicFlow 学习笔记——2. LogicFlow 基础 实例

LogicFlow 实例 创建实例 每一个流程设计界面&#xff0c;就是一个 LogicFlow 的实例。 <template><div id"container"></div><!-- 用于显示 LogicFlow 图表的容器 --> </template> <script>// 创建 LogicFlow 实例const lf …

Day03 链表概念与单向不循环链表的实现

目录 1、顺序表的优缺点 2、链式存储的线性表 3、单向不循环链表实现 1、顺序表的优缺点 顺序表的优点是: 由于顺序表数据元素的内存地址都是连续的,所以可以实现随机访问,而且不需要多余的信息来描述相关的数据,所以存储密度高。 顺序表的缺点是: 顺序表的数据在进行…

常用的JDK调优监控工具整理

JVM 调优首先要做的就是监控 JVM 的运行状态&#xff0c;这就需要用到各种官方和第三方的工具包了 一、 JDK 工具包 JDK 自带的 JVM 工具可以分为命令行工具和可视化工具 命令行工具 jps: JVM Process status tool&#xff1a;JVM进程状态工具&#xff0c;查看进程基本信息j…

Spring Aop及事务管理

5 Spring AOP AOP概述 AOP&#xff1a;全称是 Aspect Oriented Programming 即&#xff1a;面向切面编程。简单的说它就是把我们程序重复的代码抽取出来&#xff0c;在需要执行的时候&#xff0c;使用动态代理的技术&#xff0c;在不修改源码的基础上&#xff0c;对我们的已有…

SpringMVC框架学习笔记(七):处理 json 和 HttpMessageConverter 以及文件的下载和上传

1 处理 JSON-ResponseBody 说明: 项目开发中&#xff0c;我们往往需要服务器返回的数据格式是按照 json 来返回的 下面通过一个案例来演示SpringMVC 是如何处理的 &#xff08;1&#xff09; 在web/WEB-INF/lib 目录下引入处理 json 需要的 jar 包&#xff0c;注意 spring5.x…

OpenCV练习(1)签名修复

1.目的 在学校的学习过程中&#xff0c;需要递交许多材料&#xff0c;且每份材料上都需要对应负责人签名&#xff0c;有时候找别人要签名&#xff0c;然后自己粘贴的话&#xff0c;会出现签名模糊&#xff0c;背景不是纯白透明。为此以word中的“颜色校正”功能为参照&#xf…

基于iBeacon蓝牙定位技术的反向寻车系统

随着城市化进程的加速和汽车保有量的不断增加&#xff0c;大型停车场成为了人们日常生活中不可或缺的一部分。然而&#xff0c;在繁忙的停车场中快速找到自己的车辆&#xff0c;成为了许多车主的难题。为了解决这一问题&#xff0c;维小帮基于iBeacon蓝牙技术打造的反向寻车系统…

Linux 编写脚本自动清理旧的日志文件,释放磁盘空间

摘要:在我们的后端中每天会产生大量的日志,如果不定期清理会导致系统异常,本文讲解编写一个脚本根据日志文件的修改时间来清理日志,而无需理会日志的命名,从而使脚本更通用。 创建脚本文件: cd /data/shell vi clean_logs.sh此时进入到vi编辑器,在编辑器输入以下内容:…