Leetcode 413. Arithmetic Slice 算术序列切片(动态规划,暴力)

题目描述

如果一个数组1.至少三个元素2.两两之间差值相同,那么这个数组就是算术序列

比如下面的数组都是算术序列:

1, 3, 5, 7, 9
7, 7, 7, 7
3, -1, -5, -9

但是这一个就不是:

1, 1, 2, 5, 7

求给定数组,能有多少个算术序列

测试样例

Input: [1, 2, 3, 4]
Output: 3
有三个算术序列切片:
[1,2,3], [2,3,4], [1,2,3,4]
注意,切片是不能跳着选的...

详细分析

  1. 暴力:

    从长度3开始直到数组那么长,每次暴力求[k,k+len]是否是算术序列(是否两两差值相同)即可。

  2. 动态规划:

    对于[1,2,3,4,3,5,6],我们从3开始:

  • [1,2,3]是一个算术序列,dp[2]=1
  • 然后继续[2,3,4],是算术序列则dp[3]=dp[2]+1;
  • 继续[3,4,3]不是算术序列,dp[4]=0
  • 继续[4,3,5] dp[5]=0
  • [3,5,6] dp[6]= 0

算法实现

  • 方法1:暴力
class Solution {
public:
int numberOfArithmeticSlices(vector<int>& A) {
if(A.size()<3){
return 0;
} int totalSolution = 0;
for(int dist=3;dist<=A.size();dist++){
for(int k=0;k+dist<=A.size();k++){
// Arithmetic sequence checking for current [k,k+distance] (sub)sequence
bool isArithmeticSeq = true;
int diff = A[k+1] - A[k];
for(int p=k+2;p<k+dist;p++){
if((A[p]-A[p-1])!=diff){
isArithmeticSeq = false;
break;
}
}
if(isArithmeticSeq) totalSolution++; }
}
return totalSolution;
}
};
  • 方法2:DP
class Solution {
public int numberOfArithmeticSlices(int[] A) {
int[] dp = new int[A.length];
int sum = 0;
for(int i=2;i<A.length;i++){
if( (A[i]-A[i-1]) == (A[i-1]-A[i-2]) ){
dp[i]=dp[i-1]+1;
sum +=dp[i];
}else{
dp[i]=0;
}
}
return sum;
}
}

Leetcode 413. Arithmetic Slice 算术序列切片(动态规划,暴力)的更多相关文章

  1. LeetCode 413 Arithmetic Slices详解

    这个开始自己做的动态规划复杂度达到了O(n), 是用的是2维的矩阵来存前面的数据,复杂度太高了, 虽然好理解,但是没效率,后面看这个博客发现没有动态规划做了这个题 也是比较厉害. 转载地址: http ...

  2. LN : leetcode 413 Arithmetic Slices

    lc 413 Arithmetic Slices 413 Arithmetic Slices A sequence of number is called arithmetic if it consi ...

  3. [LeetCode]413 Arithmetic Slices

    A sequence of number is called arithmetic if it consists of at least three elements and if the diffe ...

  4. LeetCode - 413. Arithmetic Slices - 含中文题意解释 - O(n) - ( C++ ) - 解题报告

    1.题目大意 A sequence of number is called arithmetic if it consists of at least three elements and if th ...

  5. LeetCoce 413. Arithmetic Slices

    A sequence of number is called arithmetic if it consists of at least three elements and if the diffe ...

  6. Week 8 - 338.Counting Bits & 413. Arithmetic Slices

    338.Counting Bits - Medium Given a non negative integer number num. For every numbers i in the range ...

  7. 【BZOJ1489】[HNOI2009]双递增序列(动态规划)

    [BZOJ1489][HNOI2009]双递增序列(动态规划) 题面 BZOJ 洛谷 题解 这\(dp\)奇奇怪怪的,设\(f[i][j]\)表示前\(i\)个数中,第一个数列选了\(j\)个数,第二 ...

  8. 【python】序列切片和range函数

    序列的每个元素都可以用2种索引的表达方式,一种是正数索引,另一种是负数索引. 序列切片,作用是访问序列中一定范围的元素,格式“序列名[A:B]”,其中A为所切片的第一个元素的索引号,而B为切片后剩下的 ...

  9. 【BZOJ1046】上升序列(动态规划,贪心)

    [BZOJ1046]上升序列(动态规划,贪心) 题面 BZOJ 洛谷 题解 我一开始看错题了,一度以为是字典序最小的序列. 最后发现它要求的字典序是位置的字典序最小. 那就很好办了. 设\(f[i]\ ...

随机推荐

  1. JS判断IE,FF,Opera,Safari等浏览器类型

    第一种,只区分浏览器,不考虑版本 function myBrowser(){ var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串 var ...

  2. JAVA 用axis1 调用.NET的web service

    1.去官网下载axis的jar包,我下的是1.4版本的 http://axis.apache.org/axis/java/releases.html 2.JAVA 代码: public void my ...

  3. JasperMES.cn JasperMES.com.cn 我的MES网站

    好久没有更新博客园.今天写上两面的两个网址JasperMES.cn JasperMES.com.cn是想记录我在做上面两个网站时的一点心得. 老实说,现在建站的软件很多,WordPress,CMS,我 ...

  4. 模拟linux的内存分配与回收

    模拟linux的内存分配与回收 要求 通过深入理解内存分配管理的三种算法,定义相应的数据结构,编写具体代码. 充分模拟三种算法的实现过程,并通过对比,分析三种算法的优劣. (1)掌握内存分配FF,BF ...

  5. Linux Resin4.0 安装配置

    Resin,是一个非常流行的application server,对servlet和JSP提供了良好的支持,性能优良,resin自身采用Java语言开发.Resin Pro版本支持缓存和负载均衡,收费 ...

  6. codeforeces:Mister B and Astronomers分析和实现

    题目很长,稍微翻译一下: 外星球每隔T秒中只有一秒可以被观测到,其它T-1秒无法被观测.n个天文学家(分别编号为1,...,n)轮流观测天空1秒,且第i+1个科学家在第i个天文学家后ai+1秒后才执行 ...

  7. 【bzoj3942】[Usaco2015 Feb]Censoring

    [题目大意] 有一个S串和一个T串,长度均小于1,000,000,设当前串为U串,然后从前往后枚举S串一个字符一个字符往U串里添加,若U串后缀为T,则去掉这个后缀继续流程. [样例输入] whatth ...

  8. linux 压力测试工具 webbench

    webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便. 1.适用系统:Linux 2.编译安装: 1. wget htt ...

  9. laravel中的模型关联之(一对一)

    一对一 一对一的关联关系就相当于,赞和文章之间的关系,一个用户只能赞一次一个文章,只能和文章发生一次关系, 用户和赞的文章是唯一的一份,这里举得是判断用户是否赞过某个文章 一个参数都是你要获取的模型, ...

  10. Android and iOS 判断是那个系统访问。

    <!-- 如果是安卓就加载. --> <neq name="Think.server.HTTP_USER_AGENT|strstr='Android'" valu ...