动态规划之等差递减区间个数
求一个数组中等差递减区间个数,等差数列必须是连续的。
Example:
A = [1, 2, 3, 4]
return: 3, for 3 arithmetic slices in A: [1, 2, 3], [2, 3, 4] and [1, 2, 3, 4] itself.
分析:用动态规划解决问题的关键是找到每个问题的核心公式,并且知道如何存表。例如本题,我们需要一个存储总数的变量,和一个存储差量的变量。
什么是等差数列? A[i]-A[i-1]=A[i-1]-A[i-2]
#include<iostream>//数组长大于3
//dp[i] 表示到i位置时,子数组的个数
//数组中等差递增区间个数 ,等差数列要是连续的
class Solution {
public:int numberOfArithmeticSlices(int a[]) {int res = 0, n = 5;int dp[10] = {0};for(int i = 2; i < n; i++){if(a[i] - a[i-1] == a[i-1] - a[i-2])dp[i] = dp[i - 1] + 1;std::cout << res << "," << dp[i] << std::endl;res += dp[i];}return res;}
};int main(){int a[] = {1, 2, 3, 4, 5};Solution s;int n = s.numberOfArithmeticSlices(a);std::cout<< "n=" << n << std::endl;
}
打印:
0,1
1,2
3,3
n=6
// dpi res
// i = 2 123 1 1
// i = 3 123 234 1234 2 3
// i = 4 123 234 345 1234 2345 12345 3 6
// i = 5 123 234 345 456 1234 2345 3456 12345 23456 123456 4 10
其实仔细观察这就是一个斐波拉切数列,0,1....n-2数的求和,动态规划找到方程了就发现非常简单了,这就是规律,但需要自己 去发现这个规律,有些题目咋看一脸懵逼,仔细看就会发现其中的规律。
学习地址:http://www.mamicode.com/info-detail-2634216.html
动态规划之等差递减区间个数相关推荐
- 数值分区间_EXCEL统计区间个数的专属函数
这次我们学习一个新的函数! 数字区间个数统计 如下图,要求统计四个成绩区间段的人数. 如果只统计一个区间内的人数,比如上图统计60-80分之间的人数,你会怎么办呢? 1.条件计数 =COUNTIF(B ...
- RUST等差分解一个数
fn main(){println!("等差分解一个数");get_num_list(33,1.0); } fn get_num_list(n:i32,num:f32) {let ...
- python等差分解一个数
#等差分解一个数 # 假设等差差值为1 计算前n项和 s def n_sum_sepl(n,num):s=(n+1)*n/2cha=num/scha_list=[]for i in range(1,n ...
- 提高篇 第五部分 动态规划 第1章 区间类动态规划
https://blog.csdn.net/guoyangfan_/article/details/81162689 动态规划(四)--区间型动态规划_布纸所云-CSDN博客 [算法详解]区间动态规划 ...
- 树状数组 区间加 区间求和_EXCEL统计区间个数的专属函数
这次我们学习一个新的函数! 数字区间个数统计 如下图,要求统计四个成绩区间段的人数. 如果只统计一个区间内的人数,比如上图统计60-80分之间的人数,你会怎么办呢? 1.条件计数 =COUNTIF(B ...
- 3574. 乘积数量(连乘乘积为负数的区间个数,前缀和)
3574. 乘积数量 输入样例1: 5 5 -3 3 -1 1 输出样例1: 8 7 输入样例2: 10 4 2 -4 3 1 2 -4 3 2 3 输出样例2: 28 27 输入样例3: 5 -1 ...
- 2017滴滴出行笔试题:异或和为0的最大区间个数
两个bit的异或(下文均用^代表异或运算):1^0=1 0^1=1 1^1=0 0^0=0,也就是左右元素不同时为1,相同时为0. 对于两个int的异或,就是对它的二进制表示的每一位进行异或运算,比如 ...
- 动态规划/贪心 - 无重叠区间
动态规划 dp[i]dp[i]dp[i]表示以区间iii结尾,可以共存最多的区间数量. dp[i]=max(dp[i],dp[j]+1)dp[i] = max(dp[i], dp[j] + 1)dp[ ...
- 动态规划训练6 [统计单词个数]
[问题描述] 给出一个长度不超过 200 的由小写英文字母组成的字母串 ( 约定:该字母串以每行 20 个字母的方式输 入,且保证每行一定为 20 个 ) .要求将此字母串分成 k 份 (1<k ...
最新文章
- 从头开始学习Adobe Photoshop CC图像编辑
- TScreen 类 - 获取字体列表
- 如何理解 Web API
- spring 整合junit进行测试
- Pimple - 一个简单的 PHP 依赖注入容器
- 2011年5月19日盘后分析:把握行情运行主线 静待大盘明确信号
- 设计模式的七大设计原则:其二:接口隔离原则
- STM32:关于DMA,TCM(ITCM和DTCM)和Cache的理解
- 系统运维包括哪些内容_UI设计内容包括哪些?
- 白盒测试工具―Winams
- 易语言输出mysql日志_个人理解的易语言下的日志总结(备忘)
- Echars 如何描绘世界地图
- 大话数据结构 code 第四章 04斐波那契函数_Fibonacci
- java基础 day-17 设计模式(单例,工厂,代理),静态动态代理,数据库连接池(动态代理)
- PCIe+Switch高速存储方案设计
- 末日的传说 洛谷p1338
- C语言文件读写(1)-文本文件读操作
- 小白大学生学习MyBatis(二)
- TextRank方法的优化——MMR(最大边界相关算法)
- 两台pc如何高速度传输大文件