如何在 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) 中找到包含重复项的最长非递减子序列? 的相关文章

  • Swift:配对数组元素的最佳方法是什么

    我遇到了一个需要成对迭代数组的问题 最好的方法是什么 或者 作为替代方案 将数组转换为对数组 然后可以正常迭代 的最佳方法是什么 这是我得到的最好的 这个需要output成为一个var 而且它并不是很漂亮 有没有更好的办法 let inpu
  • 调度算法,找到设定长度的所有非重叠区间

    我需要为我的管理应用程序实现一种算法 该算法将告诉我何时可以将任务分配给哪个用户 我实现了一个蛮力解决方案 它似乎有效 但我想知道是否有更有效的方法来做到这一点 为了简单起见 我重写了算法以对数字列表进行操作 而不是数据库查询等 下面我将尝
  • 我如何开始玩五子棋?

    我读到Gomoku http en wikipedia org wiki Gomoku它可以使用 Minimax 和 Alpha Beta 剪枝算法来实现 所以 我阅读了这些算法 现在了解了游戏将如何解决 但是当我坐下来编写代码时 我面临着
  • AWK数组初始化

    是否可以使用常见的方法在AWK中初始化数组list syntax array val1 val2 val3 或者是否必须使用索引值 syntax array 0 val1 array 1 val2 array 2 val3 不 不 您可以这
  • Java 中查看 ArrayList 是否包含对象的最有效方法

    我有一个 Java 对象的 ArrayList 这些对象有四个字段 我用其中两个字段来将对象视为与另一个对象相等 我正在寻找最有效的方法 给定这两个字段 以查看数组是否包含该对象 问题在于这些类是基于 XSD 对象生成的 因此我无法修改类本
  • 动态二维数组非连续内存C++

    假设我将二维数组的地址及其二维数组的行和列传递给函数 该函数会将二维数组的地址视为一维数组 例如 int Matrix 如果我执行下面的代码 int arr arr new int row for int i 0 i lt row i ar
  • 按日期合并多个日志文件,包括多行

    我有几个包含所有以时间戳开头的行的日志 因此以下内容可以按预期合并它们 cat myLog1 txt myLog2 txt sort n gt combined txt 问题是 myLog2 txt 还可以包含没有时间戳的行 例如 java
  • 用于在链表中查找结点的生产代码

    我在一次采访中被问到这个问题 我被要求编写代码 用于在 O 1 空间和线性时间的生产环境中在链表 其形式为 Y 形式 双臂不一定相等 中查找结点 我想出了这个解决方案 我以前在某处见过 1 Measure lengths of both l
  • 多维数组内的移动

    我有一个用表格显示的数组 如何使用用户输入进行移动 目前 0 被分配给每个数组 但我计划为该数组分配其他值 我的问题是 如何使用用户输入在数组内向上 向下 向右 向左移动和对角移动 Array 0 gt Array 0 gt 0 1 gt
  • 在 Python 中从 Excel 复制 YEARFRAC() 函数

    因此 我使用 python 来自动执行一些必须在 Excel 中执行的重复任务 我需要做的计算之一需要使用yearfrac 这在Python中被复制了吗 I found this https lists oasis open org arc
  • 如何使用 jQuery 通过 Ajax 发送复选框数组的值?

    我有一个包含很多表单字段的表单 12 x n 行 每行中的第一个字段 代表产品 是一个类似于以下内容的复选框
  • 寻找公共子集的算法

    I have N number of sets Si of Numbers each of a different size Let m1 m2 mn be the sizes of respective sets mi Si and M
  • 如何从数组中提取特定元素?

    如果我有一个数组a 1 2 3 4 5 6 7 8 9 10 我想要这个数组的一个子集 第 1 个 第 5 个和第 7 个元素 是否可以通过简单的方式从该数组中提取这些内容 我在想这样的事情 a 0 4 6 1 5 7 但这行不通 还有一种
  • 高度并行化的Levenshtein距离算法

    实际上 我必须实现一个字符串比较 最后得到匹配百分比 不仅仅是布尔结果匹配 不匹配 为此 我找到了 Levenstein 距离算法 但现在的问题是性能 例如 我有 1k 个字符串需要相互比较 现在大约需要 10 分钟 对于每个算法 我已经并
  • 如何以最低的价格优化购物车?

    我有一个我想买的物品清单 这些商品由不同的商店提供 价格也不同 商店有单独的送货费用 我正在寻找一种最佳的购物策略 以及支持它的java库 以最低的总价购买所有商品 Example 商品 1 在 Shop1 的售价为 100 美元 在 Sh
  • 对包含元组的元组进行排序[重复]

    这个问题在这里已经有答案了 我有以下元组 其中包含元组 MY TUPLE A Apple C Carrot B Banana 我想根据以下内容对这个元组进行排序second内部元组中包含的值 即 对 Apple Carrot Banana
  • 在 Play2 和 Scala 中解析没有数据类型的 JSON

    people name Jack age 15 name Tony age 23 name Mike age 19 这是我试图解析的 json 示例 我希望能够对每个人进行 foreach 操作并打印他们的姓名和年龄 我知道当 json 数
  • 如何将特定范围内的标量添加到 numpy 数组?

    有没有一种更简单 更节省内存的方法可以单独在 numpy 中执行以下操作 import numpy as np ar np array a l r ar c a a 0 l ar tolist a r 它可能看起来很原始 但它涉及获取给定数
  • 为什么这两种不同的构造数组的方式会产生不同的行为?

    当我以两种不同的方式构造一个 2 元素数组时 例如a and b 当我将一个元素添加到内部数组之一时 我得到两个不同的结果 这也会发生在append 根据构建每个之后的输出 我希望它们完全相同 julia gt a 2 element Ar
  • 使用 python/numpy 重塑数组

    我想重塑以下数组 gt gt gt test array 11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44 为了得到 gt gt gt test2 array 11 12 21 22 13 14

随机推荐

  • 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 首先 这