【学会动态规划】等差数列划分(22)

news2024/9/27 12:04:45

目录

动态规划怎么学?

1. 题目解析

2. 算法原理

1. 状态表示

2. 状态转移方程

3. 初始化

4. 填表顺序

5. 返回值

3. 代码编写

写在最后:


动态规划怎么学?

学习一个算法没有捷径,更何况是学习动态规划,

跟我一起刷动态规划算法题,一起学会动态规划!

1. 题目解析

题目链接:413. 等差数列划分 - 力扣(LeetCode)

这道题目也不难理解,就是让我们求出在这个数组中,

有多少是等差数列的子数组,返回个数即可。

2. 算法原理

1. 状态表示

dp [ i ] 表示以 i 位置元素为结尾的所有子数组中有多少个等差数列。

2. 状态转移方程

状态转移方程有两种情况:

如果 nums[ i - 2 ],nums[ i - 1 ],nums[ i ] 构成等差数列,

那么就会在之前的基础上多一个等差数列,也就是这新构成的,

所以这种情况 dp[ i ] = dp[ i - 1 ] + 1。

如果 nums[ i - 2 ],nums[ i - 1 ],nums[ i ] 构不能成等差数列,

那只要加上了 nums[ i ] 就无法构成等差数列了,

所以 dp[ i ] = 0。

所以我们的状态转移方程就是:

dp[ i ] = nums[ i - 2 ] - nums[ i - 1 ] == nums[ i - 1 ] - nums[ i ] ? dp[ i - 1 ] + 1 : 0

3. 初始化

这里就不需要虚拟节点了,直接从 2 开始,把 dp[ 0 ] 和 dp[ 1 ] 的位置初始化成 0 即可。

4. 填表顺序

从左往右。

5. 返回值

返回整个 dp 表中所有元素的和(因为题目要计算所有等差数列的和)

3. 代码编写

class Solution {
public:
    int numberOfArithmeticSlices(vector<int>& nums) {
        int sum = 0;
        vector<int> dp(nums.size());
        for(int i = 2; i < nums.size(); i++) {
            dp[i] = nums[i - 2] -  nums[i - 1] ==  nums[i - 1] - nums[i] ? dp[i - 1] + 1 : 0;
            sum += dp[i];
        }
        return sum;
    }
};

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/889305.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Kubernetes云原生技术的低代码PaaS平台,快速构建企业级应用程序

低代码PaaS平台 低代码PaaS平台可以在云端开发、部署、运行低代码应用程序。使用独立数据库模型&#xff0c;基于Kubernetes云原生技术&#xff0c;每个租户均可拥有一套独立的存储、数据库、代码和命名空间&#xff0c;实现了100%的租户数据隔离&#xff0c;并可以随时迁移到…

在本地搭建WAMP服务器并通过端口实现局域网访问(无需公网IP)

文章目录 前言1.Wamp服务器搭建1.1 Wamp下载和安装1.2 Wamp网页测试 2. Cpolar内网穿透的安装和注册2.1 本地网页发布2.2 Cpolar云端设置2.3 Cpolar本地设置 3. 公网访问测试4. 结语 前言 软件技术的发展日新月异&#xff0c;各种能方便我们生活、工作和娱乐的新软件层出不穷&a…

iPhone 15受益:骁龙8 Gen 3可能缺席部分安卓旗舰机

明年一批领先的安卓手机的性能可能与今年的机型非常相似。硅成本的上涨可能是原因。 你可以想象&#xff0c;2024年许多最好的手机都会在Snapdragon 8 Gen 3上运行&#xff0c;这是高通公司针对移动设备的顶级芯片系统的更新&#xff0c;尚未宣布。然而&#xff0c;来自中国的…

Python Web开发 Django 简介

今天来为大家介绍 Python 另一个 Web 开发框架 Django&#xff0c;它是一个基于 Python 定制的开源 Web 应用框架&#xff0c;最早源于一个在线新闻 Web 网站&#xff0c;后于2005年开源。Django 的功能大而全&#xff0c;它提供的一站式解决的思路&#xff0c;能让开发者不用在…

在思科(Cisco)路由器中使用 SNMP

什么是SNMP SNMP&#xff0c;称为简单网络管理协议&#xff0c;被发现可以解决具有复杂网络设备的复杂网络环境&#xff0c;SNMP 使用标准化协议来查询网络上的设备&#xff0c;为网络管理员提供保持网络环境稳定和远离停机所需的重要信息。 为什么要在思科设备中启用SNMP S…

如何在出差期间远程访问企业ERP系统?内网穿透解决您的难题!

文章目录 概述1.查看象过河服务端端口2.内网穿透3. 异地公网连接4. 固定公网地址4.1 保留一个固定TCP地址4.2 配置固定TCP地址 5. 使用固定地址连接 概述 ERP系统对于企业来说重要性不言而喻&#xff0c;不管是财务、生产、销售还是采购&#xff0c;都需要用到ERP系统来协助。…

【hive】简单介绍hive的几种join

文章目录 前言1. Common Join2. Map Join介绍&#xff1a;使用方法&#xff1a;限制&#xff1a; 3. Bucket Map Join介绍&#xff1a;好处&#xff1a;使用条件&#xff1a;使用方法&#xff1a; 4. Sort Merge Bucket Map Join介绍&#xff1a;如何使用&#xff1a; 5. Skew …

银河麒麟服务器v10 sp1 .Net6.0 Serilog 运行时不创建日志文件

上一篇&#xff1a;银河麒麟服务器v10 sp1 .Net Core 上传文件错误_csdn_aspnet的博客-CSDN博客 在代码中常用的日志记录相关重要或错误日志等&#xff0c;如Serilog、Log4net等&#xff0c;本文使用Serilog&#xff0c;在Program.cs的main方法中&#xff0c;代码如下图&#…

【GitLab私有仓库】如何在Linux上用Gitlab搭建自己的私有库并配置cpolar内网穿透?

文章目录 前言1. 下载Gitlab2. 安装Gitlab3. 启动Gitlab4. 安装cpolar5. 创建隧道配置访问地址6. 固定GitLab访问地址6.1 保留二级子域名6.2 配置二级子域名 7. 测试访问二级子域名 前言 GitLab 是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xf…

K8S核心组件etcd详解(下)

1 k8s如何使用etcd 在k8s中所有对象的manifest都需要保存到某个地方&#xff0c;这样他们的manifest在api server重启和失败的时候才不会丢失。 只有api server能访问etcd&#xff0c;其它组件只能间接访问etcd的好处是 增强乐观锁系统及验证系统的健壮性 方便后续存储的替换…

pyqt5 窗口居中、退出按钮、状态栏、窗口标题、水平布局、程序图标、

import sys# QT的基类 from PyQt5.QtWidgets import QApplication# 说明创建的是主窗体 QMainWindow from PyQt5.QtWidgets import QMainWindow# 添加控件&#xff1a;按钮、主控件&#xff08;窗口&#xff09; from PyQt5.QtWidgets import QPushButton, QWidget# 添加布局&a…

ssm单位人事管理系统源码和文档

ssm单位人事管理系统源码和文档033 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳…

进程|详解~什么是进程 以及 进程创建原理和过程

1.什么是进程 进程是正在运行的程序。 UNIX标准将进程定义为&#xff1a;其中运行着一个或者多个线程的地址空间和这些线程所需要的系统资源(分配给线程线程共享系统资源)。 组成&#xff1a;进程由程序代码、数据、变量(占用着系统内存)、打开的文件(文件描述符)、环境组成…

经典文献阅读之--LIW-OAM(LiDAR-IMU-编码器融合SLAM)

0. 简介 我们之前经常接触的是使用激光雷达和惯性测量单元(IMU)的互补信息&#xff0c;但是实际使用的过程中IMU如果发生剧烈的颠簸&#xff0c;有可能会导致IMU失效。在广泛使用的迭代最近点&#xff08;ICP&#xff09;算法只能为姿态提供约束&#xff0c;而速度只能由IMU预…

Linux系统的历史记录添加时间和IP信息

1 系统history记录优化 默认情况下&#xff0c;系统是不会记录我们执行命令的时间等相关信息的。 1.1 HISTCONTROL 介绍 使用HISTCONTROL变量&#xff0c;您可以控制 bash 如何存储您的命令历史记录。您可以告诉它忽略重复的命令和/或忽略具有前导空格的命令。 在命令行工作…

亚马逊新品如何快速上首页

将亚马逊新品快速上首页是许多卖家的目标&#xff0c;但要注意&#xff0c;这涉及到多种因素&#xff0c;包括产品质量、市场竞争、营销策略等。以下是一些可能帮助您的亚马逊新品快速上首页的方法&#xff1a; 1、优化产品信息&#xff1a;确保您的产品标题、描述和关键词字段…

Scratch 之 如何制作鼠标框(1)—— 绘制鼠标框

hello&#xff0c;大家好&#xff0c;今天给大家带来如何绘制鼠标框 我们正式开始 首先&#xff0c;让我们绘制一个空角色 然后让我们来编代码 1、准备工作 &#xff08;1&#xff09;拓展 画笔 添加这个拓展↑ &#xff08;2&#xff09;变量 实际上&#xff0c;你只需…

Systemverilog 接口 interface modport使用说明

一、接口的定义   SystemVerilog在Verilog语言基础上扩展了“接口”&#xff08;interface&#xff09;结构&#xff0c;SystemVerilog增加了新的端口类型—接口&#xff0c;接口允许许多信号合成一组由一个端口表示&#xff0c;只需在一个地方对组成接口的信号进行声明&am…

4G无线网络草坪音箱,4G石头音箱

SV-7042UG 4G无线网络草坪音箱&#xff0c;4G石头音箱 一、描述 SV-7042UG是深圳锐科达电子有限公司的一款壁挂式4G无线网络草坪音箱&#xff0c;通过4G无线卡联网&#xff0c;可将网络音源通过自带的功放和喇叭输出播放&#xff0c;其采用防水设计&#xff0c;功率40W。SV-70…

chatgpt 翻译整本英文电子书,效果非常好

1. 注册chatgpt账号&#xff0c;登录后设置好API token。 https://platform.openai.com/account/api-keys 一定要把生成的token先复制保存好&#xff0c;对话框消失后就无法看到完整token了。 2. 配置免费的cloudflare workers 代理&#xff0c;否则很容易被封号 参考文档 h…