如何在 O(n) 或 O(nlogn) 中找到包含重复项的最长非递减子序列?

2023-12-08

我们知道有一种算法可以在 O(nlogn) 中找到最长递增子序列。我想知道我们是否能找到时间复杂度相似的最长非递减子序列? 例如,考虑一个数组:(4,10,4,8,9)。 最长的递增子序列是(4,8,9)。 最长的非递减子序列是 (4,4,8,9)。


首先,这是一种“黑匣子”方法,可让您使用现成的最长递增子序列求解器找到最长的非递减子序列。让我们看一下您的示例数组:

4, 10, 4, 8, 9

现在,假设我们通过向每个数字添加一小部分来对该数组进行如下转换:

4.0, 10.1, 4.2, 8.3, 9.4

以这种方式更改数字不会改变两个不同整数之间的任何比较的结果,因为整数分量比小数点后的值具有更大的幅度差异。然而,如果你比较两者4现在来看,后4个比前一个比较大。如果你现在找到最长的非减子序列,你就会回来[4.0, 4.2, 8.3, 9.4],然后您可以将其映射回[4, 4, 8, 9].

更一般地说,如果您正在使用包含 n 个整数值的数组,则可以将 i / n 添加到每个数字,其中 i 是其索引,然后您将得到一系列不同的数字。从那里运行常规 LIS 算法即可解决问题。

如果你不能用这种方式处理分数,你也可以将每个数字乘以 n,然后添加 i,这也可以。

另一方面,假设您有 LIS 求解器的代码,并希望将其转换为求解最长非递减子序列问题的代码。上面的推理表明,如果您将后面的数字副本视为比早期副本“更大”,那么您可以只使用常规 LIS。鉴于此,只需阅读 LIS 的代码并找到进行比较的地方即可。当对两个相等的值进行比较时,通过认为后一个值大于前一个值来打破平局。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 O(n) 或 O(nlogn) 中找到包含重复项的最长非递减子序列? 的相关文章

  • 如何在 JavaScript 中构建一个计算数组中出现次数的对象?

    我想计算数组中某个数字出现的频率 例如 在Python中我可以使用Collections Counter创建一个字典 记录某个项目在列表中出现的频率 据我所知 JavaScript 是这样的 var array 1 4 4 5 5 7 va
  • 是否保证 sizeof(T[N]) == N * sizeof(T) ?

    我一直假设 N 个元素类型的数组的大小T 由返回sizeof保证正好是N次sizeof T The 对这个问题的评论 https stackoverflow com questions 46457449 is it always the c
  • 为什么使用数组索引循环数组比指针访问慢?

    我正在读Kochan的书 Programming in C 在第 14 页的 指针和数组 部分中 264 他说 一般来说 索引数组的过程比执行索引过程花费更多的时间 访问指针内容的过程 其实这也是主要原因之一 为什么使用指针来访问数组的元素
  • 如何获取数组中最后 5 个元素(不包括第一个元素)?

    在 JavaScript 数组中 如何获取最后 5 个元素 排除第一个元素 1 55 77 88 would return 55 77 88 添加其他示例 1 55 77 88 99 22 33 44 would return 88 99
  • Powershell 数组到带引号的逗号分隔字符串

    我有一个数组 需要输出到逗号分隔的字符串 但我还需要引号 这是我所拥有的 myArray file1 csv file2 csv a myArray join a 输出为 a最终 file1 csv file2 csv 我想要的输出是 fi
  • Java中整数数组的排列算法

    我有一个工作示例来生成字符串中的所有字符排列 如下所示 static ArrayList
  • 如何使用批处理文件实现快速排序?

    虽然通常情况下 为工作选择正确的语言是件好事 但有时尝试用一种非常不合适的语言做一些事情可能会很有启发 它可以帮助您更好地理解问题 也许你不知道have按照您认为的方式解决它 它可以帮助您更好地理解该语言 也许它支持的功能比您想象的还要多
  • pq:函数unnest(未知)不是唯一的

    以下代码工作正常 但我想将 array a b c d e 定义为变量 rows err db Query select colname from SELECT date unnest array a b c d e AS colname
  • 在 Javascript 中创建数组

    我对 javascript 不太熟悉 并且在用 javascript 制作 2d 或者也许我可能需要 3d 数组时遇到了一些麻烦 我目前需要收集 2 条信息 一个 ID 和一个值 因此我创建了以下内容 var myArray var id
  • 将一维数组转换为二维数组[重复]

    这个问题在这里已经有答案了 我正在开发一个程序 我必须将文本文件中的值读入一维数组 我已经成功获取该一维数组中的数字 m1 1 2 3 4 5 6 7 8 9 但我希望数组是 m1 1 2 3 4 5 6 7 8 9 您可以使用此代码 co
  • 以编程方式分解大量数字

    好吧 所以我有一个巨大的数字f 实际上 这个数字只有 100 多位数字长 我知道这些因子的大小大致相同 如果我的资源和时间有限 我应该使用什么语言和算法 我包括在限制时间内编写算法的时间长度 想法 编辑 我所说的有限是指在尽可能短的时间内
  • 数组数据标准化

    我有一个表示强度 黑到白 的值数组 在 1 0 和 1 0 之间 我需要一种方法将双精度值从 1 0 到 1 0 映射到 0 到 255 并返回 更概括地说 我有一个数据数组 我需要将数据的最小值和最大值映射到提供的最小值和最大值 基本结构
  • 在 Perl 中,如何制作数组的深层复制? [复制]

    这个问题在这里已经有答案了 可能的重复 在 Perl 中制作数据结构深层复制的最佳方法是什么 https stackoverflow com questions 388187 whats the best way to make a dee
  • 按两列的最小值排序

    I use SQL Server 2008 R2 我需要按两列的最小值对表进行排序 该表如下所示 ID integer Date1 datetime Date2 datetime 我希望我的数据按至少两个日期排序 以这种方式对该表进行排序的
  • 将所有奇数位置的元素移动到左半部分,将偶数位置的元素移动到右半部分

    给定一个包含正整数和负整数的数组 将所有奇数索引元素移动到左侧 将偶数索引元素移动到右侧 问题的难点是在维持秩序的同时就地做 e g 7 5 6 3 8 4 2 1 输出应该是 5 3 4 1 7 6 8 2 如果顺序不重要 我们可以使用快
  • 多级排序

    我有一个表 其中包含一些记录 其中包含名称 评级等字段 我首先想要根据评级将结果限制为 20 进行排序 然后在此结果集上想要进一步应用基于名称的排序 我知道要排序我们需要使用像这样的查询 Select from table order by
  • 如何将文件中的行读入数组?

    我正在尝试将文件作为行数组读入 然后使用 zsh 对其进行迭代 我得到的代码在大多数情况下都有效 除非输入文件包含某些字符 例如括号 这是它的一个片段 bin zsh LIST cat path to some file txt SIZE
  • 使用排序函数按 NSDates 对数组进行排序[重复]

    这个问题在这里已经有答案了 我有一个名为的模型类Event import Foundation import MapKit public class Event let id Int var title String let status
  • 查找重叠间隔序列中最大和的算法

    我试图解决的问题在数轴上有一个间隔列表 每个间隔都有一个预定义的分数 我需要返回最大可能的总分 问题是间隔重叠 并且重叠间隔中我只能使用一个 这是一个例子 Intervals Score 0 5 15 4 9 18 10 15 12 8 2
  • 将数组值导出到 csv 文件 java

    我只需要帮助将数组元素导出到 csv 文件 我不知道我的代码有什么问题 任何帮助将不胜感激 谢谢 for int index 0 index lt cols length index FileWriter fw new FileWriter

随机推荐

  • getRepository 原则中不存在类

    我对教义和交响乐都很陌生 我使用 ORM 学说创建了一个带有 curd 操作的小应用程序 我的插入操作正在运行 但我的列表操作抛出一个error as 学说 通用 持久性 映射 映射异常 类 Tab 不存在 我将在这里粘贴我的代码 我的模型
  • Java try/catch/finally 获取/关闭资源时的最佳实践

    在做一个学校项目时 我编写了以下代码 FileOutputStream fos ObjectOutputStream oos try fos new FileOutputStream file oos new ObjectOutputStr
  • 编写自定义 Kafka 序列化器

    我在 Kafka 消息中使用我自己的类 其中包含一堆字符串数据类型 因此 我无法使用默认的序列化器类或StringSerializerKafka 库附带的 我想我需要编写自己的序列化器并将其提供给生产者属性 EDIT 在较新的 Kafka
  • 使用 Netlify 和 Gatsby 缩短初始服务器响应时间

    我在跑PageSpeed 见解在我的网站上 我有时遇到的一个大错误是 减少初始服务器响应时间 保持主文档的服务器响应时间较短 因为所有 其他请求取决于它 了解更多 React 如果您在服务器端渲染任何 React 组件 请考虑 使用rend
  • 握手失败并出现致命错误 SSL_ERROR_SSL

    我正在关注这个教程https hyperledger github io composer latest tutorials deploy to fabric multi org将 Composer 区块链业务网络部署到 Hyperledg
  • C# 如何循环用户输入直到输入的数据类型正确?

    如何使这段代码循环询问用户输入 直到int TryParse 成功了吗 setX public void setX take the input from the user string temp int temp2 System Cons
  • Matlab - 绘图标题中数字变量的简短格式

    我试图将变量放入绘图标题中 但无法生成 4 位小数的格式 如何避免标题中出现浮动格式 这是我使用的代码 subplot 3 2 1 hist X 10 str sprintf X N d Y d N Y M sum X N Mean spr
  • 从 Google Cloud 上的 Cloud Run 访问 Cloud SQL

    我有一个 Cloud Run 服务 可以通过以下方式访问 Cloud SQL 实例SQLAlchemy 但是 在 Cloud Run 的日志中 我看到CloudSQL connection failed Please see https c
  • 将指向成员函数的指针作为指向函数的指针传递

    情况是这样的 我结合使用 C SDL 和 GLConsole 我有一堂课 SDLGame 其中有Init Loop Render 等等 本质上 它保存了我的游戏类的逻辑 到目前为止 GLConsole 是一个不错的库 它允许我定义 CVar
  • 在 Matlab 中从命令行运行特定的单元格部分?

    我在脚本中手动循环遍历 Matlab 中的各个单元 我们称之为 foo m Code for cell 1 Code for cell 2 从 Matlab 的命令行中 我希望能够有选择地运行单元格 2 中的代码 文档仅包含如何以交互方式执
  • 在node js中使用node-oracledb将对象作为输入参数传递给存储过程

    我有一个存储过程 它接受两个输入参数并给出一个输出参数 输入参数第一个是Oracle自定义类型 第二个是CHAR类型输出参数为Number类型 PROCEDURE SOMEPROCEDURE P REC IN RV SEARCH CRITE
  • 如何在后台运行 Windows Phone 应用程序?

    我想知道 Windows Phone 应用程序是否可以在后台运行 我学过http msdn microsoft com en us library ff431744 v vs 92 aspx 在那里我找到了有关后台文件传输 代理和警报的信息
  • JavaScript 内部的国际化

    我有一个 JSP 页面 它接受超过 23 种语言的用户字符串 所以一个说英语的用户写道8 5 JavaScript 函数应该接受它以及输入8 5来自俄罗斯用户 在这种情况下 我们如何验证所有语言的 JavaScript 输入 您可能可以使用
  • PHP strtotime 错误(有时)?

    我在我的 PHP 代码中遇到了 strtotime 的问题 有时它是错误的 仅对于某些时区 而对于其他时区来说它是正确的 我无法理解它 我已经设置了也在我的页面顶部 但这没有帮助 基本上它的作用是添加或减去offset 3600值到设定时间
  • 迭代多个查询并将其存储在 pyspark dataframe 中

    我在 hive 中有一个表 我想根据循环中的条件查询它 并将结果动态存储在多个 pyspark 数据帧中 基本查询 g1 select from db hive table where group 1 group 1 spk sql g1
  • Javascript 如何匹配回调函数中的参数?

    我刚开始学习JavaScript 回调函数似乎很难理解 我的一个问题是javascript如何匹配回调函数中的参数 例如在以下 forEach 循环中 var friends Mike Stacy Andy Rick friends for
  • 如何迭代两个列表?

    我正在尝试在 pyGTk 中做一些事情 我构建了一个 HBox 列表 self keyvalueboxes for keyval in range 1 self keyvaluelen self keyvalueboxes append g
  • Angular.js:如何为所有应用程序控制器调用一次服务

    我不知道这是否是 Angular 概念之一或可能做到的 但我有一项调用用户信息 姓名 id 年龄 的服务 factory me function resource API URL q return getUser function var
  • Java Swing:多个窗口[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我是 GUI 编程新手 但需要创建一个多窗口 GUI 有谁知道有什么好的在线教程吗 或者您能否展示一个可以启动 2 个窗口的简单代码 只需创建两个
  • 如何在 O(n) 或 O(nlogn) 中找到包含重复项的最长非递减子序列?

    我们知道有一种算法可以在 O nlogn 中找到最长递增子序列 我想知道我们是否能找到时间复杂度相似的最长非递减子序列 例如 考虑一个数组 4 10 4 8 9 最长的递增子序列是 4 8 9 最长的非递减子序列是 4 4 8 9 首先 这