使数组严格递增所需的最少更改

2023-11-23

我遇到一个问题,我们有一个正数数组,我们必须通过对数组元素进行零次或多次更改来使其严格增加。

我们被问到使数组严格递增所需的最少更改次数。

Example

如果数组是 1 2 9 10 3 15

因此,如果将 3 更改为 12 到 14 之间的某个数字,则 and=1。

如果 1 2 2 2 3 4 5

ans=5

因为将2更改为3,然后将2更改为4,然后将3更改为5,然后将4更改为6,然后将5更改为7

限制条件:

数组中的元素数量

每个元素

有人可以给我一个算法吗?

链接到示例测试用例的详细问题https://www.hackerearth.com/problem/algorithm/find-path/

由于这是最小/最大问题,所以对我来说听起来像是动态规划,但我不确定。


HINT 1

这非常接近标准最长递增子序列问题这可以在 O(nlogn) 中解决。

如果您可以将数字更改为小数,那么答案将是相同的。 (最小变化次数=字符串长度-最长递增子序列的长度)

但是,由于您需要介于两者之间的不同积分值,因此您必须稍微修改标准算法。

HINT 2

考虑一下如果通过 x[i]=x[i]-i 更改数组会发生什么。

现在,您需要通过进行最小数量的更改来修改此更改的数组,以使每个元素增加或保持不变。

现在,您可以搜索该数组中最长的非递减子序列,这将告诉您有多少元素可以保持不变。

然而,这仍然可以使用负整数。

HINT 3

将算法修改为仅使用正数的一种简单方法是在数组的开头附加大量数字。

即将 1,2,9,10,3,15 更改为 -5,-4,-3,-2,-1,1,2,9,10,3,15

然后你可以确定最佳答案永远不会决定使 1 变为负数,因为使所有负数变小会花费很多成本。

(您还可以修改最长递增子序列算法以具有附加约束,但这在面试情况下可能更难正确编码。)

实施例1

按照最初的示例进行操作:

原始序列

1,2,9,10,3,15

在开始时添加虚拟元素

-5,-4,-3,-2,-1,1,2,9,10,3,15

减去数组中的位置

-5,-5,-5,-5,-5,-4,-4,2,2,-6,5

找到最长的非递减序列

-5,-5,-5,-5,-5,-4,-4,2,2,*,5

所以答案是改变一个数字。

实施例2

原始序列

1,2,2,2,3,4,5

在开始时添加虚拟元素

-5,-4,-3,-2,-1,1,2,2,2,3,4,5

减去数组中的位置

-5,-5,-5,-5,-5,-4,-4,-5,-6,-6,-6,-6

找到最长的非递减序列

-5,-5,-5,-5,-5,-4,-4,*,*,*,*,*

所以答案是改变5个数字。

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

使数组严格递增所需的最少更改 的相关文章

  • 2D形状识别与解析算法

    我正在寻找一种算法 用于从给定的一组 x y 点检测简单形状 如矩形 三角形 正方形和圆形 我还在寻找一种方法 一旦检测到 将路径转换为更干净的形状 我已经查遍了互联网 但没有找到任何 简单 的方法 几乎所有这些对于我的简单实现来说都是高级
  • 机器人探索算法

    我正在尝试为机器人设计一种算法 试图找到位于未知位置的旗帜 该旗帜位于一个包含障碍物的世界中 机器人的任务是夺取旗帜并将其带到他的基地 代表他的起始位置 机器人在每一步只能看到有限的邻域 他事先不知道世界是什么样子 但他有无限的内存来存储已
  • 寻找簇的中心

    我有以下问题 进行抽象以找出关键问题 我有 10 个点 每个点与其他点有一定距离 我想要 能够找到簇的中心 即与其他点的成对距离最小的点 令 p j p k 表示点 j 和 k 之间的成对距离p i 是簇的中心点 iff p i s t m
  • 数字求和的算法?

    我正在寻找一种数字求和的算法 让我概述一下基本原则 假设你有一个号码 18268 1 8 2 6 8 25 2 5 7 7 是我们的最终数字 它基本上是将整个数字中的每个数字相加 直到我们得到一个 也称为 核心 数字 它经常被命理学家使用
  • 逐字遍历句子

    如何逐字遍历任何给定的句子 java中有内置函数吗 我不知道如何开始 像这样的事情 String sentence Your sentence here String words sentence split s splits by whi
  • 查找重叠事件/时间的算法

    在处理自定义日历时 我不知道如何找到与任何其他时间段重叠的时间段 时段从 0 点至 720 点 上午 9 点至晚上 9 点 每个像素代表一分钟 var events id 1 start 0 end 40 an event from 9 0
  • O(n^2) 与 O (n(logn)^2)

    时间复杂度是O n 2 or O n logn 2 better 我知道当我们简化它时 它就变成了 O n vs O logn 2 and logn lt n 但是关于logn 2 n is only less than log n 2 f
  • 打印从 1 到 100 的质数

    此 C 代码打印出以下素数 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 但我不认为这就是我的书所希望的写作方式 它提到了一些关于数字的平方根的内容
  • 计算总和等于 k ​​的子集数量

    给定一个数组 我们需要找出总和恰好等于给定整数 k 的子集的数量 请针对这个问题提出一个最佳算法 这里不需要实际的子集 只需计数即可 该数组由整数组成 可以是负数也可以是非负数 例子 数组 gt 1 4 1 10 5 绝对值总和 gt 9
  • 仅使用两个变量交换两个数字

    它如何执行交换 a a b b a b a b a 我不同意把它换成书 书中的选项包括 a和b的值的补集 否定和b 希望这些选项也不能满足它 正确的算法应该是 a a b b a b a a b
  • 读取4个点的坐标。他们做一个正方形吗?

    我计算点之间的距离 如果距离相等 则点构成一个正方形 否则不 仅当我按以下顺序读取坐标 A x y B x y C x y D x y 或相反时 我的代码才有效 但是如果我这样读 例如 A x y B x y D x y C x y 它将不
  • 广度优先搜索:检查访问状态的时机

    在有向图的广度优先搜索中 可能循环 当一个节点出队时 其所有尚未访问的子节点都会入队 并且该过程将继续 直到队列为空 有一次 我以相反的方式实现它 将节点的所有子节点排队 并在节点出队时检查访问状态 如果正在出队的节点之前已被访问过 则该节
  • 找到将一个数字转换为另一个数字的最小移动次数的算法

    假设我们有两个正整数 a 和 b 每次移动我们都可以将 a 除以 2 但前提是 a 是偶数 将 a 乘以 2 或者将 a 加 1 将a变为b需要多少步 找到一个直接公式或一种有效的算法 即以对数时间运行的算法 我取得的一些进展 我们可以把它
  • 找到一个恰好出现了 N/2 次的数字

    这是我的面试问题之一 给定一个包含 N 个元素的数组以及元素出现的位置正好 N 2次 其余 N 2 个元素是unique 您如何找到运行时间更好的元素 请记住 元素未排序 您可以假设 N 是偶数 例如 input array 10 2 3
  • 为每个英文单词生成唯一序列号的算法

    对于应用程序 我需要为每个英语单词生成唯一的序列号 最好的方法是什么 一个限制是序列号生成算法应该在普通台式计算机中非常有效 Thanks 你有所有可能的单词的列表吗 如果是 则从第一个字的 0 开始 每个字将序列号加 1 如果不是 那么保
  • 在 O(n) 时间内对列表中的数字方块进行排序?

    给定一个按排序顺序排列的整数列表 例如 9 2 0 2 3 我们必须对每个元素进行平方并按排序顺序返回结果 所以 输出将是 0 4 4 9 81 我可以找出两种方法 O NlogN 方法 我们将每个元素的平方插入哈希集中 然后将元素复制到列
  • 线性问题和非线性问题之间的区别?点积和核技巧的本质

    核技巧将非线性问题映射为线性问题 我的问题是 1 线性问题和非线性问题的主要区别是什么 这两类问题的差异背后的直觉是什么 核技巧如何帮助在非线性问题上使用线性分类器 2 为什么点积在这两种情况下如此重要 Thanks 当人们说到分类问题的线
  • 如何发现“贪婪”算法?

    我正在读一本关于 贪婪 算法 但我很难发现它们解决真正的 顶级程序员 问题 If I know给定的问题可以用 贪婪 算法来解决 因此编写解决方案非常容易 然而 如果我没有被告知这个问题是 贪婪的 我就无法发现它 用 贪婪 算法解决的问题有
  • 为什么对本地列表求和比用“GHC -O2”对教会编码列表求和慢?

    为了测试教会编码的列表如何针对用户定义的列表和本机列表执行 我准备了 3 个基准测试 用户定义的列表 data List a Cons a List a Nil deriving Show lenumTil n go n Nil where
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3

随机推荐

  • 导航栏上方的 android Q 内容

    我们的应用程序的目标是 API 28 并在状态栏下绘制内容 为此 我们使用以下标志和样式 window addFlags FLAG LAYOUT NO LIMITS
  • jquery mobile 中的日期选择器在第二页中添加时是重复的

    我需要一些有关移动应用程序中日期选择器使用的帮助 我在我的应用程序中使用 jQuery UI 日期选择器 但是当我将日期选择器放在第二页时 它会显示两次 重复 但是 当我将日期选择器放在第一页时 显示正常 这是一个示例 如果您运行它 您可以
  • 有没有办法将命名范围组合成新的命名范围?

    I have class Foo lt ActiveRecord Base named scope a lambda a conditions gt a gt a named scope b lambda b conditions gt b
  • url 中的 django 用户名,而不是 id

    在一个迷你虚拟社区中 我有一个 profile view 功能 这样我就可以查看任何注册用户的个人资料 个人资料视图函数将个人资料所属的用户的 id 作为参数 因此当我想访问用户 2 的个人资料时 我会这样调用它 http 127 0 0
  • 如何使用 PowerShell Invoke-RestMethod 发送多部分/表单数据

    我正在尝试通过 Invoke RestMethod 在与带有 F 开关的curl 类似的上下文中发送文件 卷曲示例 curl F FileName path to file name https uri to post 在powershel
  • Elasticsearch节点重启后快速恢复

    考虑 elasticsearch yml 中的以下设置 gateway recover after data nodes 3 gateway recover after time 5m gateway expected data nodes
  • Linux 中对 pthread_create 的未定义引用

    我从网上获取了以下演示https computing llnl gov tutorials pthreads include
  • C++14 中不指定对象的左值

    我在这里使用 N3936 作为参考 如果 C 14 文本有任何不同 请更正此问题 3 10以下左值和右值我们有 每个表达式都属于该分类中的基本分类之一 左值 x值或纯右值 然而 定义lvalue reads An lvalue 指定一个函数
  • C 中的按位连接

    我正在尝试在 C 中连接两个二进制数 所以如果我有1010 and 0011我希望我的结果是10100011 我写了一个我认为可以完成这项工作的简短例程 include
  • Eclipse 优化导入以包括静态导入

    有没有办法让 Eclipse 自动查找静态导入 例如 现在我终于升级到了 Junit 4 我希望能够编写 assertEquals expectedValue actualValue hit Ctrl Shift O and have Ec
  • 重置 svg 填充 css

    我想让所有 svgs 都具有相同的纯色 所以我用 svg fill ccc 但我想在 hover 上获得默认填充 如何禁用填充并恢复默认值 您可以使用以下方法执行此操作 not 并有效地设置 不悬停 的样式 svg not hover fi
  • Jupyter:安装后没有名为“imblearn”的模块

    我在 ANACONDA Navigator 上安装了 imbalanced learn 版本 0 3 1 当我使用 Jupyter Python 3 运行不平衡学习网站上的示例时 from imblearn datasets import
  • Git版本兼容性

    使用 Git 进行版本控制 与不同版本的 Git 协同工作的效果如何 有关的体验 好还是坏 是什么 长话短说 我正在考虑将 Git 用于一些计划的家庭项目 但由于我使用存储库中的默认包进行的大杂烩设置将意味着完全不同的版本 我计划在运行 U
  • 关于 C# 变量作用域与其他语言的问题

    首先声明一下 我以前没用过C 对它了解不多 我正在学习 Sebesta 的 编程语言概念第 9 版 一书 准备 编程语言 考试 当我读到以下摘录自 范围声明顺序 第246页 时 我有点困惑 例如 在 C99 C Java 中 所有局部变量的
  • 没有RTTI的shared_ptr?

    我正在尝试使用shared ptr在使用 xc32 1 34 gcc 4 5 2 的衍生版本 构建的嵌入式项目中 该项目已禁用 RTTI fno rtti include
  • 如何在 MVC3 中从 javascript 调用控制器方法?

    我使用 MVC3 架构 c net 当焦点更改到下一个字段 即密码字段 时 我需要立即将文本框内容 用户 ID 与数据库进行比较 所以我想对 User Id 字段使用 onblur 事件 然后调用 Controller 方法 谁能告诉我如何
  • 通过套接字发送和接收数组

    是否可以使用Python通过UDP套接字发送数组 我正在使用 Python 2 5 并尝试发送一个简单的数组 但它不起作用 它可以成功发送数组 但是当我尝试使用数组的一项来打印它时 程序崩溃了 我不确定错误是什么 因为我采取了预防措施将数据
  • 使用 psycopg2 将 PostgreSQL UUID 数组作为列表返回

    我有一个 SQL 语句 其中包含嵌入在ARRAY 像这样 SELECT foo ARRAY SELECT x from y AS bar 查询工作正常 但是在 psycopg2 结果游标中 数组作为字符串返回 如 1 2 3 而不是列表 我
  • CQL SELECT 大于索引非键列上的查询

    EDIT1 在原始问题之后添加了一个案例来描述问题 我希望查询不属于我的键的列 如果我理解正确的话 我需要在该列上定义一个二级索引 但是 我希望使用大于条件 不仅仅是相等条件 但这似乎仍然不受支持 我错过了什么吗 您将如何解决这个问题 我想
  • 使数组严格递增所需的最少更改

    我遇到一个问题 我们有一个正数数组 我们必须通过对数组元素进行零次或多次更改来使其严格增加 我们被问到使数组严格递增所需的最少更改次数 Example 如果数组是 1 2 9 10 3 15 因此 如果将 3 更改为 12 到 14 之间的