博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
413. Arithmetic Slices(python+cpp)
阅读量:3702 次
发布时间:2019-05-21

本文共 2520 字,大约阅读时间需要 8 分钟。

题目:

A sequence of number is called arithmetic if it consists of at least three elements and if the difference between any two consecutive elements is the same.

For example, these are arithmetic sequence:

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

The following sequence is not arithmetic.

1, 1, 2, 5, 7

A zero-indexed array A consisting of N numbers is given. A slice of that array is any pair of integers (P, Q) such that 0 <= P < Q < N.

A slice (P, Q) of array A is called arithmetic if the sequence: A[P],A[p + 1], …, A[Q - 1], A[Q] is arithmetic. In particular, this means that P + 1 < Q.
The function should return the number of arithmetic slices in the array A.
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.

解释:

动态规划
解法1:
用DP来做,定义一个一维dp数组,其中dp[i]表示,到i位置为止的Arithmetic Slices的个数,那么我们从第三个数字开始遍历,如果当前数字和之前两个数字构成Arithmetic Slices,那么我们更新dp[i]dp[i-1]+1
dp[i]=dp[i-1]+1可以理解为,当A[i]可以和A[i-1]以及A[i-2]构成Arithmetic Slices的时候,那么能和A[i-1]构成Arithmetic Slices的元素必定能和A[i]构成算数切片,所以有个dp[i-1],除此之外,当前这个最新元素还可以和它前面的两个元素构成Arithmetic Slices,而它前面的两个元素在dp[i-1]的时候只有两个元素,无法构成Arithmetic Slices,故+1。
然后res累加上dp[i]的值即可
解法2:
还可以进一步优化空间,由于dp[i]只和dp[i-1]有关,所以可以用一个变量来代替上面的数组,原理都一样。
python代码:

class Solution(object):    def numberOfArithmeticSlices(self, A):        """        :type A: List[int]        :rtype: int        """        #解法1:        len_A=len(A)        if len_A<3:            return 0        dp=[0]*len_A        result=0        for i in xrange(2,len_A):            if 2*A[i-1]==A[i-2]+A[i]:                dp[i]=dp[i-1]+1            result+=dp[i]        return result
class Solution(object):    def numberOfArithmeticSlices(self, A):        """        :type A: List[int]        :rtype: int        """        #解法2:        len_A=len(A)        if len_A<3:            return 0        cur=0        result=0        for i in xrange(2,len_A):            if A[i-1]*2==A[i]+A[i-2]:                cur+=1                result+=cur            else:                cur=0        return result

c++代码:

class Solution {
public: int numberOfArithmeticSlices(vector
& A) {
//解法1 int len_A=A.size(); if (len_A<3) return 0; int result=0; vector
dp(len_A,0); for (int i =2;i
class Solution {
public: int numberOfArithmeticSlices(vector
& A) {
//解法2 int len_A=A.size(); if (len_A<3) return 0; int result=0; int cur=0; for (int i =2;i

总结:

转载地址:http://wwmcn.baihongyu.com/

你可能感兴趣的文章
关于==和equals的区别和联系,面试这么回答就可以(转载)
查看>>
漫画 | 什么是 HashMap?
查看>>
计算机网络面试题整理
查看>>
Java知识体系最强总结(2020版) 传送门
查看>>
idea创建vue项目(转载)
查看>>
关于Vue中main.js,App.vue,index.html之间关系进行总结
查看>>
vue 全屏背景图片 别看其他的了看我这篇就解决了!
查看>>
GET和POST两种基本请求方法的区别
查看>>
Vue+SpringBoot+Mybatis-plus前后端交互实现登录功能(踩了好多坑!)
查看>>
git 上传管理项目执行命令
查看>>
常见编程命名缩写
查看>>
警示:SpringBoot后端:自己写的方法没有错啊 为什么总是报错!!java.lang.NullPointerException: null
查看>>
查询数据库中的数据字段不显示 或者 报Unknown column ‘xxx‘ in ‘field list‘错解决办法(踩坑)
查看>>
使用Mybatis-Plus时,注入mapper提示Could not autowire. No beans of ‘xxxMapper‘ type found.
查看>>
拦截器 路径不生效踩坑
查看>>
mysql 免安装版 下载 配置与完美卸载 (转载)
查看>>
ubuntu18.04安装zabbix-proxy实现自动注册
查看>>
ubuntu18.04 部署zabbix
查看>>
网络映射frp
查看>>
区块链部署
查看>>