当前位置: 首页 > news >正文

力扣1027. 最长等差数列

动态规划

  • 思路:
    • 可以参考力扣1218. 最长定差子序列
    • 目前不清楚公差,可以将序列最大最小值找到,公差的范围是 [-(max - min), (max - min)],按公差递增迭代遍历求出最长等差数列;
class Solution {
public:int longestArithSeqLength(vector<int>& nums) {auto [minit, maxit] = std::minmax_element(nums.begin(), nums.end());int diff = *maxit - *minit;int ans = 0;for (int d = -diff; d <= diff; ++d) {std::unordered_map<int, int> dp;for (int v : nums) {dp[v] = dp[v - d] + 1;ans = std::max(ans, dp[v]);}}return ans;}
};
  • 时间复杂度比较高,应该是哈希表频繁插入导致,将 dp 数据结构换成数组,数组下标最大值为元素最大值 + 1;
class Solution {
public:int longestArithSeqLength(vector<int>& nums) {auto [minit, maxit] = std::minmax_element(nums.begin(), nums.end());int diff = *maxit - *minit;int ans = 1;for (int d = -diff; d <= diff; ++d) {std::vector<int> dp(*maxit + 1, -1);for (int v : nums) {int prev = v - d;// ensure prev is in nums and has exist(or v is the first item)if (prev >= *minit && prev <= *maxit && dp[prev] != -1) {dp[v] = std::max(dp[v], dp[prev] + 1);ans = std::max(ans, dp[v]);}dp[v] = std::max(dp[v], 1);}}return ans;}
};

——————————————————————————————

http://www.lryc.cn/news/287854.html

相关文章:

  • GraphicsMagick 的 OpenCL 开发记录(二十三)
  • 通过Android Logcat分析firebase崩溃
  • 【AI大模型】WikiChat超越GPT-4:在模拟对话中事实准确率提升55%终极秘密
  • 【C语言刷题系列】水仙花数的打印及进阶
  • ICSpector:一款功能强大的微软开源工业PLC安全取证框架
  • HCIA——29HTTP、万维网、HTML、PPP、ICMP;万维网的工作过程;HTTP 的特点HTTP 的报文结构的选择、解答
  • 面试经典题---3.无重复字符的最长子串
  • 使用Robot Framework实现多平台自动化测试
  • Java基础进阶02-xml
  • 《开始使用PyQT》 第01章 PyQT入门 03 用户界面介绍
  • HTML-列表
  • OceanBase创建租户
  • Java中Integer(127)==Integer(127)为True,Integer(128)==Integer(128)却为False,这是为什么?
  • 【Unity】粒子贴图异常白边问题
  • bxCAN接收处理
  • 前端面试题-(浏览器内核,CSS选择器优先级,盒子模型,CSS硬件加速,CSS扩展)
  • WEB前端标签的使用
  • 739. 每日温度
  • stm32F103C8T6简介及标准库和HAL库的区别
  • 操作系统(3)---操作系统引导
  • Vue3+Ts:实现paypal按钮
  • .[Decipher@mailfence.com].faust 勒索病毒数据怎么处理|数据解密恢复
  • 【UE Niagara】制作星光飘落效果
  • SLAM初学
  • 腾讯云轻量应用服务器Docker如何一键搭建属于自己的幻兽帕鲁服务器?
  • win10+elasticsearch8.12 安装教程
  • 经典面试题-死锁
  • mysql面试题合集-基础
  • 点灯大师(STM32)
  • @EnableEurekaServer