2022-08-18:每一个序列都是[a,b]的形式,a < b
序列连接的方式为,前一个序列的b,要等于后一个序列的a
比如 : [3, 7]、[7, 13]、[13, 26]这三个序列就可以依次连接
给定若干个序列,求最大连接的数量
定义尝试过程如下
arr[i] = {4, 9}表示,第i个序列4开始,9结束
pre : 代表选择的上一个序列,的,index是多少
比如选择的上一个序列如果是(4,9),是第5个序列,那么pre5
特别注意:如果从来没有选过序列,那么pre == -1
这个函数含义 :
index…所有的序列,随便选择。index之前的序列,不能选择
上一个选择的序列,是pre号,如果pre-1,说明之前没有选择过序列
返回题目要求的那种连接方式下,最大的序列数量
[5,13] [1,19] [2, 3] [79, 81] …
[1,19] [2, 3] [5, 13] [79, 81]
arr[i][0] : 开头
arr[i][1] : 结尾
arr已经根据开头排过序了!
preEnd index
[1, 3] [2, 4] [4, 7]
0 1 2
maxLen(0, -1)
0(选) -> maxLen(1, 0)
在arr[index…]选择序列,之前选的,离index最近的序列,位置在preIndex
请返回,index…能链接起来的,序列数量的最大值

答案2022-08-18:

递归。要i还是不要i。
时间复杂度:O(N**2)。

代码用rust编写。代码如下:

fn main() {
let mut arr: Vec<Vec<i32>> = vec![vec![1, 3], vec![3, 4], vec![4, 7]];
let ans1 = max_len(&mut arr, 0, -1);
println!("ans1 = {}", ans1);
let ans1 = max_number_subsequence(&mut arr, 0, -1);
println!("ans2 = {}", ans1);
} fn max_len(arr: &mut Vec<Vec<i32>>, index: i32, pre_index: i32) -> i32 {
if index == arr.len() as i32 {
return 0;
}
// 还有序列可以选
// index号序列
// 不选
let p1 = max_len(arr, index + 1, pre_index);
// 选
let mut p2 = 0;
// [3,17] index(9,24)
if pre_index == -1 || arr[pre_index as usize][1] == arr[index as usize][0] {
// 才能选
p2 = 1 + max_len(arr, index + 1, index);
}
return get_max(p1, p2);
} // O(N^2)
fn max_number_subsequence(arr: &mut Vec<Vec<i32>>, index: i32, pre: i32) -> i32 {
if index == arr.len() as i32 {
return 0;
}
// 就是不要当前序列
let p1 = max_number_subsequence(arr, index + 1, pre);
// 要当前序列
let mut p2 = -1;
if pre == -1 || arr[pre as usize][1] == arr[index as usize][0] {
p2 = 1 + max_number_subsequence(arr, index + 1, index);
}
return get_max(p1, p2);
} fn get_max<T: Clone + Copy + std::cmp::PartialOrd>(a: T, b: T) -> T {
if a > b {
a
} else {
b
}
}

执行结果如下:


左神java代码

2022-08-18:每一个序列都是[a,b]的形式,a < b 序列连接的方式为,前一个序列的b,要等于后一个序列的a 比如 : [3, 7]、[7, 13]、[13, 26]这三个序列就可以依次连的更多相关文章

  1. 面试一个 3 年 Java 程序员,一个问题都不会!

    大家周末愉快,当你看到这篇文章的时候,事情已经过去几天了. 刚从洽谈室走出来,心情很复杂! 栈长面试过很多人,不乏知识渊博.技能顶尖的选手,但从未遇到过工作了三年,却一个问题都答不上来.. 这场史无前 ...

  2. Sql Server 中如果使用TransactionScope开启一个分布式事务,使用该事务两个并发的连接会互相死锁吗

    提问: 如果使用TransactionScope开启一个分布式事务,使用该事务两个并发的连接会互相死锁吗? 如果在.Net中用TransactionScope开启一个事务. 然后在该事务范围内启动两个 ...

  3. 13.mutiset树每一个结点都是一个链表的指针,可以存储相同的数据

    #include <iostream> //红黑树(自动保证平衡,自动生成平衡查找树) #include <set> #include <cstring> #inc ...

  4. week07 13.4 NewsPipeline之 三 News Deduper

    还是循环将Q2中的东西拿出来 然后查重(去mongodb里面把一天之内的新闻都拿出来,然后把拿到的新的新闻和mongodb里一天内的新闻组一个 tf-idf的对比)可看13.3 相似度检查 如果超过一 ...

  5. VC中出现“烫”和“屯”的原因(栈区的每一个字节都被0xCC填充了,也就是int 3h的机器码,动态分配的堆,VC的Debug用0xCD填充堆的空间,就出现了“屯”)

    相信经常用VC的朋友对屏幕输出的一大堆“烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫”不会陌生,但是也许会很奇怪,为什么会出现“烫”字呢?莫非改程序导致系统运行缓慢,发热过高???非也!下面让我解释 ...

  6. Python第三天 序列 数据类型 数值 字符串 列表 元组 字典

    Python第三天 序列  数据类型  数值  字符串  列表  元组  字典 数据类型数值字符串列表元组字典 序列序列:字符串.列表.元组序列的两个主要特点是索引操作符和切片操作符- 索引操作符让我 ...

  7. Python第三天 序列 5种数据类型 数值 字符串 列表 元组 字典 各种数据类型的的xx重写xx表达式

    Python第三天 序列  5种数据类型  数值  字符串  列表  元组  字典 各种数据类型的的xx重写xx表达式 目录 Pycharm使用技巧(转载) Python第一天  安装  shell ...

  8. 【洛谷P1827】【USACO】 美国血统 American Heritage 由二叉树两个序列求第三个序列

    P1827 美国血统 American Heritage 题目描述 农夫约翰非常认真地对待他的奶牛们的血统.然而他不是一个真正优秀的记帐员.他把他的奶牛 们的家谱作成二叉树,并且把二叉树以更线性的&q ...

  9. 吴恩达《深度学习》-第五门课 序列模型(Sequence Models)-第三周 序列模型和注意力机制(Sequence models & Attention mechanism)-课程笔记

    第三周 序列模型和注意力机制(Sequence models & Attention mechanism) 3.1 序列结构的各种序列(Various sequence to sequence ...

  10. VB6查看桌面分辨率和工作区大小 2022.08.22 name.vt

    VB6查看桌面分辨率和工作区大小 2022.08.22 name.vt Form1 内代码如下: ' 2022年8月22日 15时15分 ' 作者:name.vt Private Sub cmdCle ...

随机推荐

  1. Python第八章实验报告

    一.实验对象:<零基础学Python>第八章的3道实例和4道实战 二.实验环境:IDLE Shell 3.9.7 三.实验要求:学习使用标准模块和第三方模块 四.实验过程: 实例01 创建 ...

  2. 1.3 ODBC 部署监控数据库

    一.安装ODBC 来自为知笔记(Wiz)

  3. 二叉树、B树、B*树、AVL树... 这么多树你真的搞清楚了吗?

    经常在面试或者平时工作中,我们都会听到类似的树,类似于二叉树.B树.B*树.AVL树等等,很多情况下可能对他们都是只有一知半解.今天我总结了所有常见的树的原理,深入浅出的分析了其中的优缺点和注意事项, ...

  4. 什么是Markdown

    什么是markdown? Markdown是一种轻量级标记语言,它允许人们使用已读一些的纯文本格式编写文档,然后转换成有效的XHTML(或者HTML)文档.这种语言吸收了很多在电子邮件中已有的纯文本标 ...

  5. 使用float进行比较问题处理

    float compare Abstract 使用float数据进行精确计算和比较,可能由于精度问题导致程序逻辑异常. Explanation 使用float数据进行比较,计算机表达double和fl ...

  6. 保姆级本地maven安装配置步骤【Windows】

    一.前期准备 1.首先需要安装并配置好本地JDK(WIN+R输入cmd,输入java -version如下图) 2.下载maven到本地(链接Maven – Download Apache Maven ...

  7. Windows 10 ltsc 2021 (2021/11/17更新版本)

    Windows 10 Enterprise LTSC 2021 (x86) - DVD (Chinese-Simplified)文件:SW_DVD9_WIN_ENT_LTSC_2021_32BIT_C ...

  8. Redis-Cluster常用命令

    CLUSTER INFO 打印集群的信息 CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息. //节点 CLUSTER MEET <ip> < ...

  9. Java面试——搜索

    更多内容,前往 IT-BLOG 一.Elasticsearch了解多少 ElasticSearch 是一个基于 Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTfu ...

  10. 通知短信 API 接入全流程(超详细整理)

    随着移动互联网和智能手机的普及,短信成为了一种便捷.快速且有效的通信方式,尤其在向用户发送重要信息或提醒方面具有很大的优势. 本文将会深入探讨如何在程序中接入通知短信 API 实现短信通知功能,此外, ...