草庐IT

leetcode 413. Arithmetic Slices 等差数列划分

okokabcd 2023-03-28 原文

一、题目大意

标签: 动态归划

https://leetcode.cn/problems/arithmetic-slices

如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。

例如,[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。
给你一个整数数组 nums ,返回数组 nums 中所有为等差数组的 子数组 个数。

子数组 是数组中的一个连续序列。

示例 1:

输入:nums = [1,2,3,4]
输出:3
解释:nums 中有三个子等差数组:[1, 2, 3]、[2, 3, 4] 和 [1,2,3,4] 自身。

示例 2:

输入:nums = [1]
输出:0

提示:

  • 1 <= nums.length <= 5000
  • -1000 <= nums[i] <= 1000

二、解题思路

因为是求等差数列,可以想到满足num[i]-num[i-1]=num[i-1]-num[i-2]。我们对于dp数组的定义通常为以i结尾的,满足某些条件的子数组数量,而等差子数组可以在任意一个位置终结,因此此题在最后需要对dp数组求和。
如果num[i] - num[i-1]=num[i-1]-num[i-2],说明num[i]能和前面构成等差数列,那么dp[i] = dp[i-1] + 1;
如果num[i] - num[i-1]!=num[i-1]-num[i-2],说明num[i]不能和前面构成等差数列,所以dp[i] = 0

三、解题方法

3.1 Java实现

public class Solution {
    public int numberOfArithmeticSlices(int[] nums) {
        if (nums.length < 3) {
            return 0;
        }
        int[] dp = new int[nums.length];
        for (int i = 2; i < nums.length; i++) {
            if (nums[i] - nums[i-1] == nums[i-1] - nums[i-2]) {
                dp[i] = dp[i-1] + 1;
            }
        }
        int sum = 0;
        for (int i : dp) {
            sum += i;
        }
        return sum;
    }
}

四、总结小记

  • 2022/6/17 泉城马上要进入40度天气了

有关leetcode 413. Arithmetic Slices 等差数列划分的更多相关文章

  1. Python 刷Leetcode题库,顺带学英语单词(31) - 2

    ValidPalindromeGivenastring,determineifitisapalindrome,consideringonlyalphanumericcharactersandignoringcases. [#125]Example:"Aman,aplan,acanal:Panama"isapalindrome."raceacar"isnotapalindrome.Haveyouconsiderthatthestringmightbeempty?Thisisagoodquestiontoaskduringaninterview.Forthepurposeofthisproblem

  2. IDEA使用LeetCode插件 - 2

    前言我们习惯用idea编写、调试代码,在LeetCode上刷题时,如果能够在IDEA编写代码,并且做好代码管理,是一件事半功倍的事情。对于后续复习题目,做笔记也会非常便利。本文目的在于介绍LeetCodeEditor的使用,以及配置工具类,最终目录结构如下:note:放置笔记src:放置代码leetcode.editor.cn:插件LeetCodeEditor自动生成utils:自定义的工具包,可用于自动化输入测试用例,定义题目需要的类(结构体)out:运行测试时自动生成LeetCodeEditorGitHub:https://github.com/shuzijun/leetcode-edit

  3. 【第37天】斐波那契数列与爬楼梯 | 迭代的鼻祖,递推与记忆化 - 2

    本文已收录于专栏?《Java入门一百例》?学习指引序、专栏前言一、递推与记忆化二、【例题1】1、题目描述2、解题思路3、模板代码4、代码解析5.原题链接三、【例题1】1、题目描述2.解题思路3、模板代码4、代码解析5、原题链接三、推荐专栏四、课后习题序、专栏前言  本专栏开启,目的在于帮助大家更好的掌握学习Java,特别是一些Java学习

  4. kubernetes集群划分节点 - 2

    Kubernetes(K8s)是一个用于管理容器化应用程序的开源平台,可以帮助开发人员更轻松地部署、管理和扩展应用程序。在Kubernetes中,集群划分是一种重要的概念,可以帮助我们更好地组织和管理集群中的节点和资源。本文将介绍如何使用Kubernetes对集群进行划分,并提供详细的操作示例,希望能够帮助读者更好地了解和使用Kubernetes平台。Node划分Node划分是将集群中的节点按照一定的规则进行划分。在Kubernetes中,可以使用NodeSelector和Affinity机制来实现Node划分。NodeSelectorNodeSelector是一种将Pod调度到符合特定节点标

  5. Ruby 拒绝正确划分 - 2

    我只是想得到一个百分比。irb(main):001:0>(25/50)*100=>0这应该绝对等于50,正如我的计算器所确认的那样(将相同的方程式复制并粘贴到gcalc中)。为什么Ruby拒绝这样做? 最佳答案 它正在做整数除法。基本上,25是一个整数(一个整数),50也是一个整数,所以当您将一个除以另一个时,它会得到另一个整数。25/50*100=0.5*100=0*100=0更好的方法是先乘,再除。25*100/50=2500/50=50您还可以通过指定小数点来显式使用浮点运算,如下所示:25.0/50.0*100=0.5*10

  6. ruby - Ruby 中的斐波那契数列(递归) - 2

    我正在尝试实现以下功能,但它一直给我stackleveltoodeep(SystemStackError)错误。任何想法可能是什么问题?deffibonacci(n)[n]if(0..1).include?n(fibonacci(n-1)+fibonacci(n-2))ifn>1endputsfibonacci(5) 最佳答案 试试这个deffibonacci(n)returnnif(0..1).include?n(fibonacci(n-1)+fibonacci(n-2))endputsfibonacci(5)#=>5也检查这篇文

  7. 实验——子网划分与路由器配置 - 2

    目录实验准备实验内容实验步骤1.规划网络拓扑2.划分IP地址块3.配置路由器及主机接口属性4.配置路由器的接口IP地址5.配置静态路由(a)按照类似的方式,配置标营校区路由器的静态路由如图所示。(b)按照类似的方式,配置中心校区路由器的静态路由如图所示。(c)按照类似的方式,配置双龙街校区路由器的静态路由如图所示。6.测试主机之间的连通性(a)首先,采用ping命令测试任意两台计算机之间的连通性,在位于岔路口校区子网的PC0上向位于双龙街校区子网的PC5发起ping测量,图16显示了测量结果,可见经过在各个路由器上配置静态路由,位于不同子网内的主机之间已经能够正常通信。(b)其次,通过浏览器测

  8. ruby-on-rails - 将模型划分到目录中是个坏主意吗? - 2

    我的Rails应用程序中有100多个模型,只是为了组织,我将它们分成文件夹,所有这些仍然在主模型文件夹下,只是为了更容易在项目中导航和查看文件相关。这是个坏主意吗?rails的方法是什么? 最佳答案 不,这不是个坏主意。很多人都这样做,在大型应用程序中我离不开它。有两种方法:首先是移动模型。但是,您必须告诉Rails加载任意模型(因为它不知道它们在哪里)。像这样的东西应该可以解决问题:#Inconfig/application.rbmoduleYourAppclassApplication第一种方法很简单,但并不是最好的方法。第二种

  9. javascript - Javascript 将未声明的函数用作对象的能力如何帮助在计算机之间划分任务? - 2

    我最近读了thisarticle试图解释如何利用JavaScript操纵函数的能力让世界上的每台计算机都在处理互联网上的所有信息方面做一小部分。我的理解是这样的:functionmap(fn,a){for(i=0;i函数map允许您快速调用数组中每个元素的函数map(function(x){returnx*2;},a);而JS允许你在不声明的情况下调用一个函数。前提是,如果Internet上的所有数据都存储为一个数组,您可以(以某种方式使用map)拆分任务,在多个CPU或所有计算机之间对数组中的每个项目进行一些特定更改世界的。这是我不明白的部分-为什么你需要map或JS的数组操作来做到

  10. javascript - 如何划分定向边界框? - 2

    我正在编写代码,为二维(不一定是凸的)多边形构建定向边界框(obb)树。到目前为止,我可以通过找到凸包并在凸包上使用旋转卡尺来找到多边形的面积最小obb。下图就是一个例子。带有红线和红点的黄色填充多边形描绘了原始多边形。凸包显示为蓝色和黑色线条,obb显示为紫色线条。(编辑)按要求:InteractiveVersion-仅在chrome中测试现在我想扩展我的代码来构建一个OBB树,而不仅仅是一个OBB。这意味着我必须切割多边形,并为多边形的每一半计算新的OBB。执行此操作的推荐方法似乎是通过将OBB切成两半来切割多边形。但是,如果我将obb从它的任一轴的中间切开,看起来我必须在多边形上

随机推荐