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

25.7.16 25.7.17 每日一题——找出有效子序列的最大长度 I/II

Description

定义有效子序列 sub=sub=sub=
(sub[0]+sub[1])modk=(sub[1]+sub[2])modk=...=(sub[n−2]+sub[n−1])modk(sub[0] + sub[1]) \mod k = (sub[1] + sub[2]) \mod k = ... = (sub[n - 2] + sub[n - 1]) \mod k(sub[0]+sub[1])modk=(sub[1]+sub[2])modk=...=(sub[n2]+sub[n1])modk
nnn 为长度)
让我们最大化 nnn

Solution

对于等式
(a+b)modm=(b+c)modk(a+b) \mod m=(b+c) \mod k(a+b)modm=(b+c)modk
移项,得
(a+b−(b+c))modk=0(a+b−(b+c)) \mod k=0(a+b(b+c))modk=0
化简得
(a−c)modk=0(a−c) \mod k=0(ac)modk=0
这意味着 aaaccckkk 同余。即题目式子中的 sub[i]sub[i]sub[i]sub[i+2]sub[i+2]sub[i+2]kkk 同余。

如果把每个 nums[i]nums[i]nums[i] 都改成 nums[i]modknums[i] \mod knums[i]modk,问题等价于:

  • 求最长子序列的长度,该子序列的奇数项都相同,偶数项都相同。

如果确定了子序列的最后两项,就确定了整个子序列。

那么我们可以从左到右遍历 numsnumsnums,遍历的同时,维护一个二维数组 f[y][x]f[y][x]f[y][x],表示最后两项模 kkk 分别为 yyyxxx 的子序列的长度。

对于 x=nums[i]modkx=nums[i] \mod kx=nums[i]modk,我们可以在最后两项模 kkk 分别为 xxxyyy 的子序列的末尾添加 nums[i]nums[i]nums[i],那么最后两项模 kkk 分别为 yyyxxx 的子序列的长度会增加 1,即
f[y][x]=f[x][y]+1f[y][x]=f[x][y]+1f[y][x]=f[x][y]+1
最后答案为 fff 中的最大值。
(其中有些讲解取自大神灵茶山艾府,感谢他

昨天的题就是 k=2k=2k=2的情况,直接cv就行……

Code1(C++、Python3)

C++

class Solution {
public:int maximumLength(vector<int>& nums) {int ans = 0;vector f(2, vector<int>(2));for (int x : nums) {x %= 2;for (int y = 0; y < 2; y++) {f[y][x] = f[x][y] + 1;ans = max(ans, f[y][x]);}}return ans;}
};

Python3

class Solution:def maximumLength(self, nums: List[int]) -> int:ans = 0f = [[0] * 2 for _ in range(2)]for x in nums:x %= 2for y in range(2):f[y][x] = f[x][y] + 1ans = max(ans, f[y][x])return ans

Code2(C++、Python3)

C++

class Solution {
public:int maximumLength(vector<int>& nums, int k) {int ans = 0;vector f(k, vector<int>(k));for (int x : nums) {x %= k;for (int y = 0; y < k; y++) {f[y][x] = f[x][y] + 1;ans = max(ans, f[y][x]);}}return ans;}
};

Python3

class Solution:def maximumLength(self, nums: List[int], k: int) -> int:ans = 0f = [[0] * k for _ in range(k)]for x in nums:x %= kfor y in range(k):f[y][x] = f[x][y] + 1ans = max(ans, f[y][x])return ans

欢迎大家关注LeetCode——C2h6oqwq。也恳求大家点赞收藏加关注~~~

http://www.dtcms.com/a/284902.html

相关文章:

  • NumPy 数组存储字符串的方法
  • 「Linux命令基础」Shell常见命令
  • Qwen3-8B Dify RAG环境搭建
  • 从C#6天学会Python:速通基础语法(第一天)
  • 【面板数据】企业劳动收入份额数据集-含代码及原始数据(2007-2022年)
  • 模板方法设计模式
  • JUnit5 实操
  • 杭州卓健信息科技有限公司 Java 面经
  • CPP学习之list使用及模拟实现
  • 【39】MFC入门到精通——C++ /MFC操作文件行(读取,删除,修改指定行)
  • 闲庭信步使用图像验证平台加速FPGA的开发:第二十一课——高斯下采样后图像还原的FPGA实现
  • 在VsCode上使用开发容器devcontainer
  • 基于MATLAB的极限学习机ELM的数据分类预测方法应用
  • VSCode 配置 C# 开发环境完整教程(附效果截图)
  • 【后端】.NET Core API框架搭建(7) --配置使用Redis
  • java-字符串
  • 东芝2822AM复印机请求维修C449简单操作修复步骤
  • vue3 自定义vant-calendar header/footer/maincontent
  • 【实时Linux实战系列】利用容器化实现实时应用部署
  • 量化环节剖析
  • 鸿蒙Navigation跳转页面白屏
  • 【agent实战】基于 LangGraph 实现 Agentic RAG:原理、实战与创新全解
  • SII9022ACNU-富利威-HDMI芯片
  • stack,queue,priority_queue的模拟实现及常用接口
  • Qt6-学习Cmakelist(翻译官方文档)
  • Pytorch深度学习框架实战教程02:开发环境部署
  • python学智能算法(二十二)|SVM-点与超平面的距离
  • faster-lio仿真环境问题及解决
  • 腾讯云服务上下载docker以及使用Rabbitmq的流程
  • Python网络爬虫——介绍