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

在排列中查找已排序的子序列

在排列中查找已排序的子序列是一个经典的计算机科学问题,可以使用动态规划算法来解决。以下是一个简单的算法实现:

  1. 首先,将原始序列和子序列分别存储在两个数组中。
  2. 使用动态规划算法,创建一个二维数组,其中行表示子序列的长度,列表示原始序列的长度。
  3. 对于每个子序列元素,遍历原始序列,检查是否存在匹配项。如果存在匹配项,则将该元素的值添加到动态规划数组中。
  4. 最后,检查动态规划数组的最后一行,找到最长的匹配子序列。

以下是一个使用Python实现的示例代码:

代码语言:python
复制
def find_longest_subsequence(arr, sub_arr):
    m, n = len(arr), len(sub_arr)
    dp = [[0] * (n + 1) for _ in range(m + 1)]

    for i in range(1, m + 1):
        for j in range(1, n + 1):
            if arr[i - 1] == sub_arr[j - 1]:
                dp[i][j] = dp[i - 1][j - 1] + 1
            else:
                dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])

    return dp[m][n]

arr = [1, 2, 3, 2, 4, 5, 6]
sub_arr = [2, 4, 6]

print(find_longest_subsequence(arr, sub_arr))  # 输出:3

在这个示例中,原始序列是 [1, 2, 3, 2, 4, 5, 6],子序列是 [2, 4, 6]。算法将返回子序列在原始序列中的最长匹配长度,即3。

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

相关·内容

排序数组查找数字

排序数组查找数字 题目1:数字排序数组中出现次数 统计一个数字排序数组中出现次数。例如,输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3出现了4次,因此输出4....思路: 2分查找数组第一个k: 1. 如果中间数字大于k,那么k只可能出现在前半段 2. 如果中间数字小于k,那么k只可能出现在后半段 3....一个长度为n-1递增排序数组所有数字都是唯一,并且每个数字都在范围0~n-1之内。范围0~n-1内n个数字中有且仅有一个数字不在该数组,请找出这个数字。...我们发现m正好是第一个值和下标不相等下标。 1. 如果中间元素值与下标相等,则查找右边。 2....如果中间元素值与下标不相等,并且前面一个元素下标与值正好相等,则这个下标就是数组缺失数字。 3. 如果中间元素值与下标不相等,并且前面一个元素下标与值也不相等,怎查找左边。

3.7K20

满足条件序列数目(排序+二分查找+快速幂)

请你统计并返回 nums 能满足其最小元素与最大元素 和 小于或等于 target 非空 序列数目。 由于答案可能很大,请将结果对 10^9 + 7 取余后返回。...示例 1: 输入:nums = [3,5,6,7], target = 9 输出:4 解释:有 4 个子序列满足该条件。...(nums 可以有重复数字) [3] , [3] , [3,3], [3,6] , [3,6] , [3,3,6] 示例 3: 输入:nums = [2,3,3,4,6,7], target = 12...输出:61 解释:共有 63 个非空子序列,其中 2 个不满足条件([6,7], [7]) 有效序列总数为(63 - 2 = 61) 示例 4: 输入:nums = [5,2,4,1,7,6,8],...target = 16 输出:127 解释:所有非空子序列都满足条件 (2^7 - 1) = 127 提示: 1 <= nums.length <= 10^5 1 <= nums[i] <= 10

80020

排序数组之间最长公共序列(二分查找

题目 给定一个由整数数组组成数组arrays,其中arrays[i]是严格递增排序,返回一个表示所有数组之间最长公共序列整数数组。...序列是从另一个序列派生出来序列,删除一些元素或不删除任何元素,而不改变其余元素顺序。...示例1: 输入: arrays = [[1,3,4], [1,4,7,9]] 输出: [1,4] 解释: 这两个数组最长子序列是[1,4]。...arrays = [[2,3,6,8], [1,2,3,5,6,7,10], [2,3,4,6,9]] 输出: [2,3,6] 解释: 这三个数组最长子序列是...解题 对第一个数组里每个数,如果其在所有其它数组里(有序,二分查找),那么就加入答案 class Solution { public: vector longestCommomSubsequence

42130

Leetcode算法【34排序数组查找元素】

之前ARTS打卡,我每次都把算法、英文文档、技巧都写在一个文章里,这样对我帮助是挺大,但是可能给读者来说,一下有这么多输入,还是需要长时间消化。...Algorithm LeetCode算法 排序数组查找元素第一个和最后一个位置 (https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array.../) 题目描述:给定一个按照升序排列整数数组 nums,和一个目标值 target。...找出给定目标值在数组开始位置和结束位置。 你算法时间复杂度必须是 O(log n) 级别。 如果数组不存在目标值,返回 [-1, -1]。...因为给出题目里描述了,我们传入数组是已经排过序,二分法能有效提高查找效率。 同样也是需要进行类似线性查找方式,只不过这次我们查找次数不会很多。

2.4K20

查找算法:双重排序数组中进行快速查找

假设A是一个n\*n二维数组。它行和列都按照升序排列,给定一个数值x,设计一个有效算法,能快速在数组A查找x是否存在。...第二行,折半查找到7时,7比6.5大,此时根据行和列都升序排列条件,我们可以忽略掉7开始矩阵,也就是[7,8,11,12,15,16],由此一下就排除掉无需考虑一大堆元素。...2,由于矩阵元素按照列进行升序排列,因此我们可以第j列元素中进行折半查找,直到找到给定数值元素,或是大于给定元素最小元素为止,假设该元素位于第i行 3,第i行[0,j-1]范围内元素折半查找...,那么一定位于该元素左边矩阵,因此此时可以该元素所在行左边元素折半查找。...例如给定数值10,我们在上面二维矩阵查找,首先我们第一行折半查找,找到第一行最后一个元素4,然后4所列折半查找,找到比10大最小元素时12,然后我们12所行内折半查找,于是就能找到元素10

1K10

牛客 牛牛独特序列(双指针二分查找

解题 2.1 双指针 2.2 二分查找 1....题目 链接:https://ac.nowcoder.com/acm/contest/9752/B 来源:牛客网 牛牛现在有一个长度为len只包含小写字母‘a’-'z’字符串x,他现在想要一个特殊序列..., 这个子序列长度为3*n(n为非负整数), 序列第[1,n]个字母全部为‘a’, 序列[n+1,2*n]个字母全部为‘b’, 序列[2*n+1,3*n]个字母全部为‘c’, 牛牛想知道最长符合条件独特序列长度是多少...示例1 输入 "cbacb" 返回值 0 说明 没有符合条件非空子序列,所以输出0 示例2 输入 "abaabbcccc" 返回值 6 说明 最长符合条件序列为"aabbcc",所以输出6 ?...解题 2.1 双指针 class Solution { public: /** * 代码类名、方法名、参数名已经指定,请勿修改,直接返回方法规定值即可 *

27510

【剑指offer|5.排序数组查找数字I】

0.排序数组查找数字I 1.低效率方法© 通过二分查找找到目标值, 局部时间复杂度O(logN); 然后目标值左右扫描, 直到分别扫描到第一个3和最后一个3, 因为要查找数字长度为N数组可能出现...© 我们考虑怎样更好地利用二分查找,在前面的算法,时间主要消耗一个一个找target,从而找到第一个target和最后一个target上,所以我们能不能用通过某种方式更快地直接找到第一个target...二分查找算法总是先拿数组中间数和target作比较,如果中间数字比target大,则target有可能出现在前半段,下一轮我们只用在前半段找就可以了;如果中间数字比target小,则target有可能出现在后半段...如果中间数字和target相等那?...我们先判断这个数字是不是第一个target,如果这个数字前一个数字不等于target, 那么这个数字刚好就是第一个target ; 如果这个数字前一个数字等于target, 那么第一个target一定就在前半段

83740

python序列排序,包括字典排序、列表排序、升序、降序、逆序

一、基础概念 我们知道python内建序列包括字典、列表、元组、字符串等,序列是python中最基本数据结构。...列表、元组、字符串这类序列索引默认第一个元素索引从0开始,第二个元素索引是1,依次是2、3、4... 字典索引则直接由键来决定值,键可以是字符串、元组、数字,依次对应到相应值。...序列排序,视频教程 二、排序排序使用函数往往是sorted,这个函数使用后返回,这个函数我们只需要了解三个参数,我们就可以解决日常排序问题。...', '服务员', 30)] 其实这里更重要根本是采用sorted函数key参数传值进去。...Python变量名称是区分大小写。 第二种:使用items方法对字典整体排序输出 这种方法还是要结合lambda表达式来一起使用,使用起来也很方便。

7K20

css 对元素文档排列影响

文档中元素排列主要是根据层叠关系进行排列;   形成层叠上下文方法有:     1)、根元素     2)、position 属性值为: absolute | relative,且 z-index...| inline-flex;     5)、opacity 属性值小于 1 元素;     6)、transfrom 属性值不为 none 元素;     7)、mix-blend-mode 属性值不为...;   元素 z-index 值只同一个层叠上下文中有意义。...如果父级层叠上下文层叠等级低于另一个层叠上下文,那么它 z-index 设再高也没用; 层叠顺序   层叠顺序(层叠次序、堆叠顺序)描述是元素同一个层叠上下文中顺序规则,从底部开始,共有七种层叠顺序...,相对还有 IFC (inline Formattion Context) 内联格式化上下文;   一个 BFC 范围包含创建该上下文元素所有元素,但不包括创建新 BFC 元素内部元素;

1.8K20

重新排列句子单词(桶排序

题目 「句子」是一个用空格分隔单词字符串。给你一个满足下述格式句子 text : 句子首字母大写 text 每个单词都用单个空格分隔。...请你重新排列 text 单词,使所有单词按其长度升序排列。 如果两个单词长度相同,则保留其原句子相对顺序。 请同样按上述格式返回新句子。...输出需要按单词长度升序排列,新句子第一个单词首字母需要大写。...示例 2: 输入:text = "Keep calm and code on" 输出:"On and keep calm code" 解释:输出排序情况如下: "On" 2 个字母。..."keep" 4 个字母,因为存在长度相同其他单词, 所以它们之间需要保留在原句子相对顺序。 "calm" 4 个字母。 "code" 4 个字母。

96830

算法-删除排序数组重复项

https://blog.csdn.net/li_xunhuan/article/details/89843311 题目:给定一个排序数组...,你需要在原地删除重复出现元素,使得每个元素只出现一次,返回移除后数组新长度。...示例 1: 给定数组 nums = [1,1,2], 函数应该返回新长度 2, 并且原数组 nums 前两个元素被修改为 1, 2。 你不需要考虑数组超出新长度后面的元素。...你不需要考虑数组超出新长度后面的元素。...只有不重复,赋值并自增; 可见一点:逻辑化简后,代码段更加精炼,并且更加清晰明了 2.我们对于这种判断是需要设计两个快、慢指针;快指针始终增加,慢指针满足一定条件才增加;这样一来就起到了删除数组元素

3.4K20

关于vim查找和替换

1,查找 normal模式下按下/即可进入查找模式,输入要查找字符串并按下回车。 Vim会跳转到第一个匹配。按下n查找下一个,按下N查找上一个。...set smartcase 将上述设置粘贴到你~/.vimrc,重新打开Vim即可生效 4,查找当前单词 normal模式下按下*即可查找光标所在单词(word), 要求每次出现前后为空白字符或标点符号...例如当前为foo, 可以匹配foo barfoo,但不可匹配foobarfoo。 这在查找函数名、变量名时非常有用。 按下g*即可查找光标所在单词字符序列,每次出现前后字符无要求。...即foo bar和foobarfoo均可被匹配到。 5,查找与替换 :s(substitute)命令用来查找和替换字符串。...^E与^Y是光标移动快捷键,参考: Vim如何快速进行光标移 大小写敏感查找 查找模式中加入\c表示大小写不敏感查找,\C表示大小写敏感查找

22.6K40
领券