首页
学习
活动
专区
工具
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 均为非负整数,其中

73910
  • 字符串之正则表达式

    当然,代价就是更复杂,比如你可以编写一个正则表达式,用来查找所有 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.3K20

    普林斯顿算法讲义(三)

    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。

    15510

    【重拾C语言】二、顺序程序设计(基本符号、数据、语句、表达式、顺序控制结构、数据类型、输入输出操作)

    可移植性:C语言编写程序具有很高可移植性,因为它语法特性在不同计算机系统上基本保持一致。这使得程序可以在不同平台上进行编译执行,而无需对代码进行太多修改。 4....扩展性:C语言允许程序编写自定义函数库,扩展语言功能。这使得C语言非常适合大型项目的开发,可以将代码组织成模块化结构,并通过函数调用进行复用。...2.2.3 标识符 在C语言中,标识符是用来表示变量、函数、类型等命名符号。标识符必须字母或下划线开头,可以包含字母、数字下划线。标识符是区分大小写。...C语言支持两种注释形式: 单行注释:使用//开头,从//到行末内容都被视为注释。 多行注释:使用/*开头*/结尾,之间内容都被视为注释。...常见语句包括赋值语句、条件语句、循环语句等。每个语句分号(;)结尾。 2.5 表达式 表达式是由操作数运算符组成序列,用于执行特定计算或操作。

    13110

    通过编写扫雷游戏提高你 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.2K20

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

    如何使用本教程 别被下面那些复杂表达式吓倒,只要跟着我一步一步,你会发现正则表达式其实并没有想像中那么困难。...通配符类似,正则表达式也是用来进行文本匹配工具,只不过比起通配符,它能更精确地描述你需求——当然,代价就是更复杂,比如你可以编写一个正则表达式,用来查找所有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 有点类似。 ^匹配你要用来查找字符串开头,$匹配结尾

    94010

    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.3K20

    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.6K40

    Python 基础语法

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

    67740

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

    思路 “全排列”就是一个非常经典“回溯”算法应用。我们知道,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)。

    44240

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

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

    80620

    2024-10-02:用go语言,你可以通过遍历字符串s,找到字符c开头结尾非空子字符串,然后统计它们数量即可。 输入:

    2024-10-02:用go语言,你可以通过遍历字符串s,找到字符c开头结尾非空子字符串,然后统计它们数量即可。 输入:s = "abada", c = "a"。 输出:6。...解释: "a" 开头结尾子字符串有:"abada"、"abada"、"abada"、"abada"、"abada"、"abada"。...大体步骤如下: 1.创建一个函数 countSubstrings(s string, c byte) int64 用于统计字符串 s 中字符 c 开头结尾非空子字符串数量。...3.然后计算字符 c 开头结尾非空子字符串数量。这可以通过数学公式计算得出,即首先用 k 乘以 k+1,再除以 2。...5.对于输入示例 s = "abada", c = 'a',程序会统计字符 'a' 开头结尾非空子字符串数量,即 "abada"、"abada"、"abada"、"abada"、"abada"、

    9520

    【数据结构与算法】基础算法之查找概述

    3.1 查找概述 查找算法是一种在数据集中寻找特定数据项方法。通常,数据集是在计算程序中存储,例如数组、链表或散列表。在编写程序时,查找算法是非常重要,它有助于快速找到所需数据。...在本文中,我们将介绍一些基本查找算法及其特点。 线性查找 线性查找也称为顺序查找,是一种最简单查找算法。在这种算法中,我们从数据集开头开始,逐个比较每个数据项,寻找要查找数据。...它利用哈希函数将数据项映射到散列表中位置。在查找过程中,我们只需通过哈希函数计算目标数据位置,然后检查该位置是否包含目标数据。 哈希表查找时间复杂度是O(1)。...小结 在编写程序时,我们需要选择适合数据集大小其他要求最佳查找算法。例如,如果数据集很小,则线性查找可能是最快选择;如果数据集已经排序,则二分查找是非常有用。...然而,在大型数据集中,哈希表查找通常是最好选择。了解不同类型查找算法及其特点可以帮助我们在编写程序时做出明智选择。

    6310

    一文详解 | 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。通过这两个选项可以对搜索条件进行更复杂组合。 此外还可以使用小括号对搜索条件进行分组。

    4.6K10

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

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

    40520

    【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)。

    36920

    好物分享第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
    领券