首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何编写O(n)程序来计算以特定数字开头和结尾的子集的数量

编写O(n)程序来计算以特定数字开头和结尾的子集的数量,可以使用动态规划的思想来解决。

首先,定义一个长度为10的数组count,用于记录以0-9开头和结尾的子集的数量。数组的下标表示开头和结尾的数字。

然后,遍历给定的集合,对于每个数字,更新count数组中对应的位置的值。具体更新方式如下:

  1. 初始化count数组,将所有位置的值都设置为0。
  2. 遍历给定的集合,对于每个数字num:
    • 如果num是集合中的第一个数字,则将count[num]加1。
    • 否则,将count[num]加上count[num-1]的值。
  • 遍历完集合后,count数组中的值即为以0-9开头和结尾的子集的数量。

以下是示例代码:

代码语言:txt
复制
def countSubsets(nums):
    count = [0] * 10
    for num in nums:
        if num == nums[0]:
            count[num] += 1
        else:
            count[num] += count[num-1]
    return count

# 示例输入
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 调用函数计算子集数量
subset_count = countSubsets(nums)

# 输出结果
for i in range(10):
    print(f"以数字{i}开头和结尾的子集数量为:{subset_count[i]}")

这个程序的时间复杂度为O(n),其中n为给定集合的长度。它通过动态规划的方式,利用了子问题的重叠性质,避免了重复计算,从而实现了高效的计算。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

正则表达式

可以使用正则表达式识别文档中特定文本,完全删除该文本或者用其他文本替换它。 3.基于模式匹配从字符串中提取子字符串。 4.查找文档内或输入域内特定文本。...g global - 全局匹配 查找所有的匹配项 m multi line - 多行匹配 使边界字符 ^ $ 匹配每一行开头结尾,记住是多行,而不是整个字符串开头结尾 s 特殊字符圆点 ....符号 描述 应用场景 基础正则BRE ^ ...开头 匹配指定字符开头内容:^zls $ ...结尾 匹配指定字符结尾内容:zls$ ....匹配确定 n 次。 'o{2}' 不能匹配 "bo3" 中 'o'但是能匹配 "foot" 中两个 o {n,} n 是一个非负整数。匹配确定 n 次。...'o{2,}' 不能匹配 "Bob" 中 'o'但能匹配 "foooood" 中所有 o'o{1,}' 等价于 'o+''o{0,}' 则等价于 'o*' {n,m} m n 均为非负整数,其中

71110

字符串之正则表达式

当然,代价就是更复杂,比如你可以编写一个正则表达式,用来查找所有 0 开头,后面跟着 2-3 个数字,然后是一个连字号 “-” ,最后是 7 或 8 位数字字符串(像 011-12345678 或...\b 是正则表达式规定一个特殊代码(有些人叫它元字符,metacharacter),代表着单词开头结尾,也就是单词分界处。...{n,m} m n 均为非负整数,其中 n<=m。最少匹配 n 次且最多匹配 m 次。例如, “o{1,3}” 将匹配 “fooooood” 中前三个 o 为一组,后三个 o 为一组。...Multiline 更改 ^ 含义,使它们分别在任意一行行首行尾匹配,而不仅仅在整个字符串开头结尾匹配。在此模式下 精确含意是:匹配 \n 之前位置以及字符串结束前位置.)...含义,使它与每一个字符匹配(包括换行符 \n ) ExplicitCapture 仅捕获已被显式命名组。 含义,使它们分别在任意一行行首行尾匹配,而不仅仅在整个字符串开头结尾匹配。

3.2K20

普林斯顿算法讲义(三)

DAG 中路径数量。 给定一个有向无环图(DAG)两个特定顶点 s t,设计一个线性时间算法计算从 s 到 t 有向路径数量。 提示:拓扑排序。 DAG 中长度为 L 路径。...至少有 3 个字符,并且第三个字符为 0 0 数量是 3 倍数 相同字符开头结尾 奇数长度 0 开头且长度为奇数,或以 1 开头且长度为偶数 长度至少为 1 且最多为...编写一个正则表达式,匹配字母表{a, b, c}中包含所有字符串: a 开头 a 结尾 最多一个 a 至少有两个 a 偶数个 a a 数量加上 b 数量为偶数...编写一个 Java 正则表达式,匹配 4 位数字开头并以两个大写字母结尾车牌。 编写一个正则表达式,从 DNA 字符串中提取编码序列。...它以 ATG 密码子开头停止密码子(TAA、TAG 或 TGA)结尾。参考 编写一个正则表达式检查序列 rGATCy:即,它是否 A 或 G 开头,然后是 GATC,最后是 T 或 C。

11110

通过编写扫雷游戏提高你 Bash 技巧

这将是地雷在雷区里位置。控制地雷数量,在开始编写代码之前,这么做会容易一些。实现这一功能逻辑可以更好,但我这么做,是为了让游戏实现保持简洁,并有改进空间。...o=9;; j ) o=10;; esac 下面的代码会计算用户所选单元格实际对应数字,然后将结果储存在变量中。...Bash 中,可以在两个圆括号内进行数学计算,这里我们会多次用到。 还是沿用之前例子,玩家输入了 c3。 接着,它被转化成了 ro=3 o=3。...仔细观察这个计算过程,看看最终结果 i 是如何计算出来: i=$(((ro*10)+o)) i=$(((3*10)+3))=$((30+3))=33 最后结果是 33。...所以,根据玩家输入坐标,程序会根据(m)中随机生成数,来生成周围其他单元格值(如上图所示)。之后将所有值初始输入坐标相加,最后结果放在 i(计算结果如上)中。

1.1K20

这可能是迄今为止最好一篇正则入门教程-上

如何使用本教程 别被下面那些复杂表达式吓倒,只要跟着我一步一步,你会发现正则表达式其实并没有想像中那么困难。...通配符类似,正则表达式也是用来进行文本匹配工具,只不过比起通配符,它能更精确地描述你需求——当然,代价就是更复杂,比如你可以编写一个正则表达式,用来查找所有0开头,后面跟着2-3个数字,然后是一个连字号...比如下面这个例子: 0\d\d-\d\d\d\d\d\d\d\d匹配这样字符串:0开头,然后是两个数字,然后是一个连字号“-”,最后是8个数字(也就是中国电话号码。...下面来看看更多例子: \ba\w*\b匹配字母a开头单词——先是某个单词开始处(\b),然后是字母a,然后是任意数量字母或数字(\w*),最后是单词结束处(\b)。...元字符^(和数字6在同一个键位上符号) $ 都匹配一个位置,这 \b 有点类似。 ^匹配你要用来查找字符串开头,$匹配结尾

92510

linux基础命令介绍四:文本编辑 vim

在插入模式下(普通模式按a、i、o等),输入一个单词开头,然后按CTRL-P或CTRL-N就会自动补齐。 底行模式共三个开始字符(:、/、?),其中/?.../g # %表示所有行 如替换指定行匹配字符串: :n,ms/pattern/string/g 这里nm都是数字,代表行号。...下面介绍一部分将要用到正则表达式概念用法: 匹配位置: ^ 表示行开头 $ 表示行结尾 < 表示单词开头 > 表示单词结尾 匹配字符: . 表示匹配任意单个字符(相当于通配符中?)...在使用正则表达式时,有时需要在特殊字符之前加上转义字符"\"来使特殊字符表示它字面意思而不是它特殊意义,在特定工具中使用正则时,也需要这样做避免特殊字符被工具本身解释。...^转义符'\'用法 如: :%g/^\sxyz/normal dd 此命令作用是全局匹配空白后接xyz开头行,并执行普通模式下命令dd 如匹配6个以上小写字母: /\a\{6,} 如交换冒号

1.2K20

Linux基础之正则表达式

正则表达式是对字符串(包括普通字符(例如,a 到 z 之间字母)特殊字符(称为“元字符”))操作一种逻辑公式,就是用事先定义好一些特定字符、及这些特定字符组合,组成一个“规则字符串”,这个“规则字符串...: 查看显示 /etc/fstab 文件 # 注释开头行: 这里也可以不加【】: -v 取反,即显示不以#注释行,-o 选项为只显示匹配到字符串: 显示 /etc/fstab 文件非注释行...,#号开头,后面仅跟一个空格,且不以空白符结尾行: 显示 /tmp/sshd_config 文件中不以#注释、空白行以及有空白字符行: 显示 /etc/passwd 文件中用户名用户SHELL...为一样行: 显示 /tmp 目录下,非字母开头,后面跟一个字母,后面为任意长度任意字符文件或者目录: 显示 /tmp 目录下非字母开头,后面仅跟一个字母,然后非字母结尾文件目录: 显示.../etc 目录下p开头不以数字结尾所有文件目录: 显示 ip a 或者 ifconfig 命令中IP地址,-E 选项为支持扩展正则表达式: -l 选项可以列出包含字符串文件列表: -w

1.1K20

Python 自动化指南(繁琐工作自动化)第二版:七、使用正则表达式模式匹配

同样,您可以在正则表达式末尾放一个美元符号()表示字符串必须这个正则表达式模式结束。您可以同时使用^表示整个字符串必须匹配正则表达式——也就是说,仅在字符串某个子集上进行匹配是不够。...), match='2'> >>> endsWithNumber.search('Your number is forty two.') == None True r'^\d+$'正则表达式字符串匹配一个或多个数字字符开头结尾字符串...^spam表示字符串必须spam开头。 spam$表示字符串必须spam结尾。 .匹配除换行符以外任何字符。 \d、\w\s分别匹配一个数字、单词或空格字符。...如何编写一个正则表达式匹配每三位数用逗号分隔数字?...实践项目 为了练习,编写程序完成以下任务。 日期检测 编写一个正则表达式检测DD/MM/YYYY格式日期。

6.5K40

Python 基础语法

---- Python 标识符 在python里,标识符有字母、数字、下划线组成。 在python中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。...单下划线开头(_foo)代表不能直接访问类属性,需通过类提供接口进行访问,不能用”from xxx import *”而导入; 双下划线开头(__foo)代表类私有成员; 双下划线开头结尾...行缩进 Python与其他语言最大区别就是,Python代码块不使用大括号({})控制类,函数以及其他逻辑判断。python最具特色就是用缩进来写模块。...缩进空白数量是可变,但是所有代码块语句必须包含相同缩进空白数量,这个必须严格执行。 如下所示: #!...其中三引号可以由多行组成,编写多行文本快捷语法,常用语文档字符串,在文件特定地点,被当做注释。 word = 'word' sentence = "这是一个句子。"

65340

【回溯算法】回溯,从入门到入土,七道试题精选、精讲、精练

思路 “全排列”就是一个非常经典“回溯”算法应用。我们知道,N数字全排列一共有 N!N!N! 这么多个。...大家可以尝试一下在纸上写 3 个数字、4 个数字、5 个数字全排列,相信不难找到这样方法。 数组 [1, 2, 3] 全排列为例。...我们先写 1 开头全排列,它们是:[1, 2, 3], [1, 3, 2]; 再写 2 开头全排列,它们是:[2, 1, 3], [2, 3, 1]; 最后写 3 开头全排列,它们是:[3,...,当我们选定一个数时候,就将这个数组相应位置设置为 true ,这样在考虑下一个位置时候,就能够 O(1) 时间复杂度判断这个数是否被选择过,这是一种“空间换时间”思想。...就本题而言,只需要叶子结点那个状态,在叶子结点执行拷贝,时间复杂度是 O(N)。路径变量在深度优先遍历时候,结点之间转换只需要 O(1)。

42640

高级数据结构讲解与案例分析

二部图,图所有顶点可以分成两个子集 U V,子集顶点互不直接相连,图里面所有的边,一头连着子集 U 里顶点,一头连着子集 V 里顶点。...举例:给定一系列字符串,这些字符串构成了一种字典,要求你在这个字典当中找出所有“ABC”开头字符串。 解法 1:暴力搜索 直接遍历一遍字典,然后逐个判断每个字符串是否由“ABC”开头。...假设字典很大,有 N 个单词,要对比不是“ABC”,而是任意,那不妨假设所要对比开头平均长度为 M,那么时间复杂度是 O(M×N)。...因此,前缀树在这种场合中是非常高效。 经典应用 网站上搜索框会罗列出搜索文字作为开头相关搜索信息,这里运用了前缀树进行后端快速检索。...字典匹配解法 2:对比字符串前缀,借助前缀树重新构建字典。 假如在矩阵里遇到了一个字符”V”,而字典里根本就没有“V”开头字符串,则不需要将深度优先搜索进行下去,可以大大地提高搜索效率。

77120

一文详解 | Linux find 命令

find 命令有非常大灵活性,可以向其指定丰富搜索条件(如文件权限、属主、属组、文件类型、日期大小等)定位系统中文件目录。...可以表示任意一个单一符号 * 可以表示任意数量(包括 0)未知符号 find /usr -name '*.txt' 查找 /usr 目录下所有文件名 .txt 结尾文件 find /usr...如查找 /usr 下所有文件名 .txt 结尾文件或目录,且该文件父目录必须是 src。可以使用以下命令: find /usr -path '*/src/*.txt' 2....r-xr-xr-x(即系统中所有用户都只有读写权限)文件目录,可以使用以下命令: find /usr -perm a=rx 很多时候,我们只想匹配文件权限一个子集。...实际上 find 命令支持 “and” “or” 两种逻辑运算,对应命令选项分别是 -a -o。通过这两个选项可以对搜索条件进行更复杂组合。 此外还可以使用小括号对搜索条件进行分组。

1.9K10

预备小菜:Python入门之字符串

字符串基本操作 字符串是 Python 中最常用数据类型。我们可以使用引号('或")创建字符串,字符串也是有运算符,跟数字一样能进行相加,得到一个新字符串。...ll结尾 True Startend参数可以理解为先将元字符串进行从start到end切分,然后在判断新字符串是否指定字符开头或者结尾。...、结尾空格开头以及结尾空格,strip()函数相当于lstip()+rstrip()。....strip()) #去除开头结尾空格 hel lo 注意:以上方法仅对开头以及结尾空格有效,并不能去除字符串中间空格,如果需要去除字符串中间空格,可以使用replace()。...我们都知道计算机只是认识01,那怎么让计算机认识我们编写英文、汉字,就是需要字符编码字符集,简单讲就是按照用预先规定编码格式对这些将文字、数字或其他对象转成代码。

39020

php模糊查询实现方法

= 4.使用sql匹配模式,匹配时,不区分大小写 #查询用户名某个字符开头用户 #查询用户名字符'l'开头用户: l% SELECT * FROM user WHERE username LIKE... 'l%'; #查询用户名某个字符结尾用户 #查询用户名字符'e'结尾用户:e% SELECT * FROM user WHERE username LIKE 'e%'; #查询用户名包含某个字符用户...(正则表达式) .匹配任意单个字符 *匹配0个或多个在它前面的字符 x*表示匹配任何数量x字符 [..]匹配中括号中任意字符 [abc]匹配字符ab或c [a-z]匹配任意字母 [0-9]匹配任意数字...[0-9]*匹配任意数量任何数字 [a-z]*匹配任何数量字母 ^表示某个字符或字符串开始 ^a 表示字母a开头 $表示某个字符或字符串结尾 s$表示字母s结尾 使用正则表达式匹配模式使用操作符是...匹配,假设N个,那么其匹配模式表示,大于等于N个; 怎么理解上面这句话呢? 就是说 ... 匹配大于等于3个字符数据 ....

2.4K10

好物分享第13弹:正则表达式简明学习指南

表示任何单个字符 ^,表示字符串开头部分;^abc,匹配abc 开头字符串。 $,匹配字符串结尾;abc$,匹配abc 结尾字符串。...5)语法 由于正则表达式存在多种不同语法(类似于方言赶脚),而主要学习是PCRE 子集,其适用于perlpython编程语言及grep或egrep正则表达式匹配规则。...额外补充一些: \d 数字,等价于[0-9] \D 非数字。 \w 单词字符,等价于[A-Z], [a-z], [0-9] 及 -。 \W 非单词字符。 \t 制表符。 \n 空行。...第三题: PY{:3}N可表示 PN PYN PYYN PYYYN 经典正则表达式 1)^[A-Za-z]+,匹配开头结尾之间,也就是任意数目的二十六个大小写字母组成字符串。...可以再加上数字,^[A-Za-z0-9]+2)整数字符串如何表示呢?^-?

1.2K20

【C++】算法集锦(3):回溯,从入门到入土,七道试题精选、精讲、精练

思路 如果左括号数量不大于 n,我们可以放一个左括号。如果右括号数量小于左括号数量,我们可以放一个右括号。...怎么用,是不是感觉千头万绪,但是又捋不出一个头绪,很难受。 思路 “全排列”就是一个非常经典“回溯”算法应用。我们知道,N数字全排列一共有 N! 这么多个。...我们先写 1 开头全排列,它们是:[1, 2, 3], [1, 3, 2]; 再写 2 开头全排列,它们是:[2, 1, 3], [2, 3, 1]; 最后写 3 开头全排列,它们是:[3,...,当我们选定一个数时候,就将这个数组相应位置设置为 true ,这样在考虑下一个位置时候,就能够 O(1) 时间复杂度判断这个数是否被选择过,这是一种“空间换时间”思想。...就本题而言,只需要叶子结点那个状态,在叶子结点执行拷贝,时间复杂度是 O(N)。路径变量在深度优先遍历时候,结点之间转换只需要 O(1)。

33520

Linux shell编程常用方法总结

1. shell是什么 shell是通过c语言编写,是用户Linux之间接口程序编写shell脚本方便于系统管理。...shell按登录分:交互式非登录shell非交互式shell。 “Unix shell,一种壳层与命令行界面,是UNIX操作系统下传统用户计算交互界面。...第一个用户直接输入命令执行各种各样任务。普通意义上shell就是可以接受用户输入命令程序。它之所以被称作shell是因为它隐藏了操作系统低层细节。 2....分为局部变量环境变量。 局部变量 字母、数字、_组成,字母下划线开头。其中数字开头变量保留为shell本身使用。...[[]] 同上 bash调试 “启动调试 bash -选择项 shell程序文件名 -n:不会执行该脚本,仅查询脚本语法是否有问题,并给出错误提示。

2.7K90

C++概述

C++简介 计算机不懂人类语言,所以计算程序必须用计算机可以使用语言编写。...因为这些指令都是以二进制代码形式存在,为了机器语言形式给计算机发布指令,必须二进制代码输入指令。...汇编语言使用短描述性单词(助记符)表示每一条机器指令。 如:add一般表示数字相加,sub表示相减。将数字2和数字3相加得到结果:add 2, 3, result使用汇编语言比机器语言更加容易。...他们是平台独立,这意味高级语言书写程序可以在不同类型计算机上运行,高级语言很像英语,易于学习使用。 下面列举高级语言,每种都是为特定目的而设计。...书写注释是一个良好编程习惯 有助于对代码阅读 注释语言应准确、易懂、简洁 单行注释:”//”开头 多行注释:“/”开头,”/”结尾 2.6 转义序列 #include int

85830
领券