动态规划-子序列问题——1027.最长等差数列

1.题目解析

题目来源:1027.最长递增子序列——力扣

测试用例

2.算法原理

1.状态表示

等差数列至少是三个数,所以一维数组显然无法满足状态表示,所以需要开辟一个二维数组来表示,二维数组的两个下标分别是倒数第一与倒数第二个数

dp[i][j]:倒数第一个位置下标为j,倒数第二个位置下标为i的最长等差子序列的长度

2.状态转移方程

a. 这里需要固定倒数第二个位置来移动倒数第一个位置找到倒数离倒数第二个位置最近的倒数第三个数的位置

b. 为什么需要最近的倒数第三个数字的位置呢,因为如果出现许多重复的数字,当该数字满足等差数列,显然取最后一个位置插入等差数列会使等差数列长度最长

c. a中的遍历方法就是方便取出最近的倒数第三个数字的下标,这里取下标需要逐个遍历,效率很低,不妨将数组中元素与下标绑定插入哈希表,但是直接全部插入哈希表也会效率很低,所以不妨在找到倒数第三个数时动态插入,这样既保证了倒数第三个数一定位于倒数第二个数之前且效率更高

d. 当固定第i个位置遍历完整个数组后将i下标后移,然后将后移前的nums[i]插入哈希表,这样保证哈希表中只有构成等差子序列的元素及其下标

3.初始化

由于我们一开始就确定了等差子序列的最后两个数,所以哪怕没有构成等差子序列那么长度也为2,所以不妨开始就将dp表全部初始化为2

4.填表顺序

固定倒数第二个位置移动倒数第一个数字找到倒数第三个数字,存入哈希表,再将倒数第二个数存入哈希表

5.返回值

返回dp表的最大值 

3.实战代码

class Solution {
public:int longestArithSeqLength(vector<int>& nums) {int n = nums.size();//将第一个位置插入哈希表unordered_map<int,int> hash;hash[nums[0]] = 0;    vector<vector<int>> dp(n,vector<int>(n,2));int ret = 2;for(int i = 1;i < n;i++){for(int j = i + 1;j < n;j++){int a = 2 * nums[i] - nums[j];if(hash.count(a)){dp[i][j] = dp[hash[a]][i] + 1; }ret = max(ret,dp[i][j]);}hash[nums[i]] = i;}return ret;}
};

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

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

相关文章

【JSON相关漏洞(Hijacking+Injection)挖掘技巧及实战案例全汇总】

JSON相关漏洞&#xff08;HijackingInjection&#xff09;挖掘技巧及实战案例全汇总 本文一是在为测试过程中遇到json返回格式时提供测试思路&#xff0c;二是几乎所有国内的资料都混淆了json和jsonp的区别——这是两种技术&#xff1b;以及json和jsonp hijacking的区别——这…

基于知识图谱的设备问答系统

你是不是还在为毕业设计苦恼&#xff1f;今天我就来给大家分享一款基于知识图谱的设备问答系统&#xff0c;不仅技术领先&#xff0c;而且非常适合用作毕业设计项目&#xff0c;帮助你轻松通过&#xff01; 项目简介 这个设备问答系统基于Django&#xff08;后端框架&#xf…

从零开始的 vue项目部署到服务器详细步骤(vue项目build打包+nginx部署+配置ssl证书)

从零开始的 vue项目部署到服务器详细步骤&#xff08;vue项目build打包nginx部署配置ssl证书&#xff09; 文章目录 从零开始的 vue项目部署到服务器详细步骤&#xff08;vue项目build打包nginx部署配置ssl证书&#xff09;一、前言二、vue项目部署前配置1、vite.config.js 增加…

ubuntu内核更新导致显卡驱动掉的解决办法

方法1&#xff0c;DKMS指定内核版本 用第一个就行 1&#xff0c;借鉴别人博客解决方法 2&#xff0c;借鉴别人博客解决方法 方法2&#xff0c;删除多于内核的方法 系统版本&#xff1a;ubuntu20.24 这个方法是下下策&#xff0c;如果重装驱动还是不行&#xff0c;就删内核在…

Spring 的事务传播机制

Spring 的事务传播机制定义了一个事务方法在遇到已经存在的事务时如何处理。事务传播属性&#xff08;Propagation&#xff09;提供了七种机制&#xff0c;以适应不同的业务需求和事务边界管理。 1. Spring 的事务传播机制的类型 &#xff08;1&#xff09;REQUIRED&#xff…

uv sync失败HTTP status server error (504 Gateway Timeout) for url (http://...)

内网环境下&#xff0c;服务器Linux系统可以正常uv sync更新和安装依赖&#xff0c;本地电脑Windows系统却总是报错&#xff0c;大致错误信息如下&#xff1a; error: Failed to download: xxxCaused by: HTTP status server error (504 Gateway Timeout) for url (http://...…

豆瓣同城活动采集-过去一年到未来已定档活动

通过采集豆瓣同城活动&#xff0c;来辅助分析一个城市的文商旅体活跃繁荣程度。 以成都为例&#xff0c;2023年10月30日到2024年11月未来已定档活动期间&#xff0c;豆瓣同城活动共有975场。 示例数据&#xff1a; 活动网址&#xff1a;有&#xff0c;此处不显示 封图网址&…

海量数据面试题

⭐️前言⭐️ 本篇文章主要针对在面试时可能涉及到的海量数据的面试题&#xff0c;该类型面试题常常考虑通过位图、布隆过滤器或者哈希的方式来解决。 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f349;博主将持续更新学习记录收获&#xff0c;友友们有任何…

pytorh学习笔记——cifar10(九)使用torhvision的标准resnet模型

之前的demo都是模仿和简化了已有的模型&#xff0c;也可以直接调用orhvision的标准模型&#xff0c;代码将更加简单。 新建resnet18.py import torch.nn as nn from torchvision import modelsclass ResNet18(nn.Module):def __init__(self, num_classes10):super(ResNet18, …

JavaScript 前端开发

JavaScript 前端开发是现代 Web 开发的重要组成部分。它涉及到使用 JavaScript 语言来创建动态的、交互式的网页应用。随着技术的发展&#xff0c;JavaScript 不仅限于浏览器中的脚本编写&#xff0c;还可以用于服务器端开发&#xff08;如 Node.js&#xff09;、移动应用开发&…

json与python中字典的互相转化

json的定义 JSON &#xff08;JavaScript Object Notation&#xff09; &#xff0c;是一种轻量级的数据交换格式。它的使用范围很广&#xff0c;并成为 ECMA 标准&#xff0c;可以被使用在多种编程语言中&#xff0c;用于前后端之间的数据传输、存储和交换数据。可以说是“用…

如何快速分析音频中的各种频率成分

从视频中提取音频 from moviepy.editor import VideoFileClip# Load the video file and extract audio video_path "/mnt/data/WeChat_20241026235630.mp4" video_clip VideoFileClip(video_path)# Extract audio and save as a temporary file for further anal…

Rust 力扣 - 5. 最长回文子串

文章目录 题目描述题解思路题解代码题解链接 题目描述 题解思路 从中心点先寻找和中心点相等的左右端点&#xff0c;在基于左右端点进行往外扩散&#xff0c;直至左右端点不相等或者越界&#xff0c;然后左右端点这个范围内就是我们找寻的回文串&#xff0c;我们遍历中心点&am…

在Java中,需要每120分钟刷新一次的`assetoken`,并且你想使用Redis作为缓存来存储和管理这个令牌

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把手教你开发炫酷的vbs脚本制作(完善中……&#xff09; 4、牛逼哄哄的 IDEA编程利器技巧(编写中……&#xff09; 5、面经吐血整理的 面试技…

HarmonyOS“一次开发,多端部署”

目录 一、核心概念与目标 二、开发基础问题与解决思路 &#xff08;一&#xff09;基础问题 &#xff08;二&#xff09;解决思路 三、应用开发流程与示例 四、工程管理具体操作 五、应用 UX 设计通用规则与考虑因素 一、核心概念与目标 定义&#xff1a;一套代码工程&…

Netty的简介与实战

Netty简介 一、背景与来源 Netty最初是由JBOSS提供的一个Java开源框架&#xff0c;现在已成为Github上的独立项目。它基于Java的NIO&#xff08;New Input/Output&#xff09;模型&#xff0c;提供了简单而强大的抽象&#xff0c;使得网络编程变得更加容易和高效。 二、特点…

macOS 15 Sequoia dmg格式转用于虚拟机的iso格式教程

想要把dmg格式转成iso格式&#xff0c;然后能在虚拟机上用&#xff0c;最起码新版的macOS镜像是不能用UltraISO&#xff0c;dmg2iso这种软件了&#xff0c;你直接转放到VMware里绝对读不出来&#xff0c;办法就是&#xff0c;在Mac系统中转换为cdr&#xff0c;然后再转成iso&am…

Unity3D学习FPS游戏(3)玩家第一人称视角转动和移动

前言&#xff1a;上一篇实现了角色简单的移动控制&#xff0c;但是实际游戏中玩家的视角是可以转动的&#xff0c;并根据转动后视角调整移动正前方。本篇实现玩家第一人称视角转动和移动&#xff0c;觉得有帮助的话可以点赞收藏支持一下&#xff01; 玩家第一人称视角 修复小问…

mysql 十把锁之《小猫钓鱼》

元数据锁&#xff1a;在这个美丽的森林里&#xff0c;小猫们决定要把钓鱼的成果记录下来。于是&#xff0c;它们首先需要创建一个 “鱼表” 来存放钓鱼的信息。当开始创建鱼表的时候&#xff0c;数据库自动为这个表加上了元数据锁。这个锁是为了防止在表的结构定义等元数据被修…

NAT技术和代理服务器

NAT IP原理 之前我们讨论了, IPv4协议中, IP地址数量不充足的问题 NAT技术当前解决IP地址不够用的主要手段, 是路由器的一个重要功能;NAT能够将私有IP对外通信时转为全局IP. 也就是就是一种将私有IP和全局IP相互转化的技术方法:很多学校, 家庭, 公司内部采用每个终端设置私有…