这道题我做的方法用了n2 的时间复杂度 太麻烦了
官方解答里用了 n的时间复杂度
一开始没看懂 这里详细解释一下
假设有一个序列
1 2 3 4 5 6 7 8 9
包含6 的长度为奇数的子序列有多少个?
6左边有5个数字 右边有3个数字
首先不看这个问题 写一个表格 加入某个数字在一个子序列里,不同长度下 左右两侧的数字分别有多少个:
长度为1: 0-0
长度为3:0-2 1-1 2-0
长度为5:0-4 1-3 2-2 3-1 4-0
长度为7:0-6 1-5 2-4 3-3 4-2 5-1 6-0
对于6而言 只满足这几种情况
0-0 0-2 和 2-0 2-2 和 4-0 4-2
1-1 1-3 和 3-1 3-3 和 5-1 5-3
左侧为偶数的 不能超过5 右侧为偶数的不能超过3
左侧为奇数的 不能超过5 右侧为奇数的 不能超过3
所以一共是
((5+1)//2 )((3+1)//2) + (5//2+1)(3//2+1) =32+32=12种
所有的数字都可以这么算 最后就得到答案了
这种方法只需要 n的时间复杂度
1588
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 题目描述 有两个长度分别为 n1,n2 的长条,长条每格高度分别为 h 或 2h,呈齿状上下咬合在一起。长条不能调...
- 1)这本书为什么值得看: Python语言描述,如果学的Python用这本书学数据结构更合适 2016年出版,内容...
- 笔者按照目录刷题,对于每一道题,力争使用效率最高(时间复杂度最低)的算法,并全部通过C++代码实现AC。(文中计算...