塔楼高度之间的最小差异?

2024-04-17

我正在做一些面试问题,我看到了这个

已知 n 座塔的高度和 k 值。您必须将每个塔的高度增加或减少 k。您需要最小化最长和最短塔的高度之间的差异并输出该差异。

我想答案将是(maxheight-k) - (minheight + k)。 我已经尝试过一些测试用例,它运行良好。

但我不确定,我想我错过了一些东西,是吗?


m7thon 的答案解释了您的解决方案的问题,所以我只会解释您如何实际解决这个问题。 。 。

The big thing to observe is that for any given tower, if you choose to increase its height from hi to hi + k, then you might as well increase the height of all shorter towers: that won't affect the maximum (because if hj < hi, then hj + k < hi + k), and may help by increasing the minimum. Conversely, if you choose to decrease the height of a tower from hi to hi − k, then you might as well decrease the heights of all taller towers.

So while there are 2n possible ways to choose which towers should be increased vs. decreased, we can actually ignore most of these. Some tower will be the tallest tower that we increase the height of; for all shorter towers, we will increase their height as well, and for all taller towers, we will decrease their height. So there are only n interesting ways to choose which towers should be increased vs. decreased: one for each tower's chance to be the tallest tower that we increase the height of.

[迂腐的注释#1:您可能会注意到,降低高度也是有效的 all 塔,在这种情况下就没有这样的塔。但这相当于增加所有塔的高度——无论我们是否相加 k 到每个高度或减去 k 从各个高度来看,无论哪种方式,我们实际上都没有改变最大-最小。]

[迂腐的注释#2:我只提到了“较短的塔”和“较高的塔”,但多个塔也可能具有相同的初始高度。但这种情况并不重要,因为我们不妨全部增加或全部减少——增加一些、减少另一些是没有意义的。所以这里描述的方法仍然有效。]

So, let's start by sorting the original heights and numbering them in increasing order, so that h1 is the original height of the originally-shortest tower and hn is the original height of the originally-tallest tower.

For each i, try the possibility that the ith-shortest tower is the tallest tower that we increase the height of; that is, try the possibility that we increase h1 through hi and decrease hi+1 through hn. There are two groups of cases:

  • If i < n, then the final height of the finally-shortest tower is min(h1 + khi+1 − k), and the final height of the finally-tallest tower is max(hi + khn − k). The final difference in this case is the latter minus the former.
  • If i = n, then we've increased the heights of all towers equally, so the final difference is just hn − h1.

然后我们从所有的中取最小的差异n这些可能性。

Here's a Java method that implements this (assuming int-valued heights; note that hi is arr[i-1] and hi+1 is arr[i]):

private static int doIt(final int[] arr, final int k) {
    java.util.Arrays.sort(arr);
    final int n = arr.length;
    int result = arr[n - 1] - arr[0];
    for (int i = 1; i < n; ++i) {
        final int min = Math.min(arr[0] + k, arr[i] - k);
        final int max = Math.max(arr[n - 1] - k, arr[i - 1] + k);
        result = Math.min(result, max - min);
    }
    return result;
}

请注意,我已经拉出了i = n为了方便起见,在循环之前使用 case。

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

塔楼高度之间的最小差异? 的相关文章

  • 有人可以解释以下异或属性

    我的一个论坛提到给定的数组n数字 arr 0 n 1 以下条件成立 is the xor运算符 f l r f 0 r f 0 l 1 where f l r arr l arr l 1 arr r 我检查了上面的数组数量和不同的值l an
  • 将数组数据从 html 表单传递到 php 数组变量

    我有一张表格来记录一组项目的工作时间 该表单使用项目 ID 小时数和注释字段的数组 表单行是项目数量的循环 该表单将数据传递给 PHP 脚本进行处理 PHP 脚本没有看到数组中的值 它只是给我 Array 作为输出 文档和其他示例让我想知道
  • 在Matlab中对字符进行分组并形成矩阵

    我有 26 个字符 A 到 Z 我将 4 个字符组合在一起 并用空格分隔以下 4 个字符 如下所示 abcd efgh ijkl mnop qrst uvwx yz 我的Matlab编码如下 str abcdefghijklmnopqrst
  • Karasuba算法递归过多

    我正在尝试用 c 实现 Karasuba 乘法算法 但现在我只是想让它在 python 中工作 这是我的代码 def mult x y b m if max x y lt b return x y bm pow b m x0 x bm x1
  • 无需构建树即可预测霍夫曼压缩比

    我有一个二进制文件 我知道其中每个符号出现的次数 如果我要使用霍夫曼算法压缩它 我需要预测压缩文件的长度 我只对假设的输出长度感兴趣 而不对单个符号的代码感兴趣 因此构建霍夫曼树似乎是多余的 作为一个例子 我需要得到类似的东西 包含 4 个
  • 数组中连续元素的最大乘积

    我在现场面试的时候被问到了这个算法问题 由于没有要求我签署保密协议 我将其发布在这里寻求答案 给定一个数组REAL不包含 0 的数字 找到产生最大乘积的连续元素 该算法应在线性时间内运行 我考虑过以下方法 使用两个数组 第一个是利用DP思想
  • 分而治之策略来确定列表中是否有超过 1/3 的相同元素

    我正在使用分治算法来确定列表中是否有超过 1 3 的元素相同 例如 1 2 3 4 不 所有元素都是唯一的 1 1 2 4 5 是的 其中 2 个是相同的 没有排序 是否有分而治之的策略 我陷入了如何划分的困境 def is valid i
  • 为什么对于小数组,for-of 循​​环比标准 for 循环快,而对于大数组则慢?

    在 JavaScript 中 我注意到 ES6for of循环的性能与传统的有很大不同for start stop step loop 基准 const n 10000 const arr Array n fill map e i gt i
  • 生成所有多集大小为 n 的分区的算法

    我一直在试图找出一种方法来生成多重集的所有不同的大小为 n 的分区 但到目前为止却空手而归 首先让我展示一下我想要实现的目标 假设我们有一个输入向量uint32 t std vector
  • 如何在java中将数组值排序为循环格式?

    我的数组值如下 String value 1 2 3 4 5 6 7 8 9 10 假设如果我将值 5 传递给 tat 数组 它应该按如下顺序排序 5 6 7 8 9 10 1 2 3 4 怎么办 有人帮忙吗 感谢你 你需要的就是所谓的轮换
  • 指向特征矩阵的指针数组

    我在代码中使用 Eigen 的 MatrixXd 矩阵 在某个时刻我需要一个 3D 矩阵 由于 Eigen 没有三维矩阵类型 因为它仅针对线性代数进行了优化 因此我创建了一个 MatrixXd 类型的指针数组 Eigen MatrixXd
  • 如何在 perl 中合并两个数组,交替每个数组中的值

    假设我有 2 个如下所示的数组 a1 Vinay Raj harry b1 dude rock 合并后我想要这样的结果 Vinay dude Vinay rock Raj dude Raj rock harry dude harry roc
  • 使用并集查找(又名不相交集)检测图是否是二分图

    我正在 Spoj 上做一个问题 基本上可以简化为检测图是否是二分图 我正在尝试使用 dfs 为图表着色 但它太慢了 有人评论这个 没有 bfs 没有 dfs 没有二部图 简单的并查集就可以做到 确实速度很快 提示 1 偶数长度的环不会影响两
  • 二维数组的 MPI 数据类型

    我需要将一个整数数组的数组 基本上是一个二维数组 从根传递给所有处理器 我在 C 程序中使用 MPI 如何声明二维数组的 MPI 数据类型以及如何发送消息 我应该使用广播还是分散 你需要使用播送 http www netlib org ut
  • JavaScript 数组和对象除了 .length 属性之外有什么区别?

    我认为 JS 数组只是一个哈希映射 它只接受整数值作为键 length 属性只返回最大索引 1 这是正确的吗 还有其他区别吗 您错了 数组可以有任何你想要的键 此外 他们还继承了Array原型
  • 如何使用 Perl 分割文本文件并将其存储到二维数组中?

    230215 01 16 2000 57533 0 1045403 0 0 217623 230215 01 18 2000 77659 0 1045403 0 0 217624 230215 01 25 2000 76583 0 1045
  • 如何从一维数组和静态字符串创建对象

    我想要一个像 var obj ABC name true dob true CDE name true dob true EFG name true dob true CBA name true dob true XYZ name true
  • 对象数组的数组(二维数组)JNI

    我正在努力创建自定义对象类型 ShareStruct 的二维数组 jobjectArray ret jobjectArray ins jobjectArray outs jclass myClass env gt FindClass env
  • numpy:如何连接数组? (获得多个范围的并集)

    我使用Pythonnumpy 我有一个 numpy 索引数组a gt gt gt a array 5 7 12 18 20 29 gt gt gt type a
  • F# 中的数组初始化

    如何根据给定的记录类型在 F 中创建和初始化数组 假设我想创建一个包含 100 个 record1 记录的数组 e g type record1 value1 string value2 string let myArray Array i

随机推荐

  • Sitecore - 如何导入内容?

    因此 我收到了一项新任务 将内容从网站导入到使用 Sitecore CMS 构建的新网站 我的客户基本上正在进行改造 以前的网站是使用非常旧的 CMS 构建的 所有内容都是 HTML 格式 我实际上正在考虑抓取旧网站并将所有内容转储为 cs
  • 在 Android Studio 上导入 panoramaGL

    我在项目中导入 PanoramaGL 库时遇到问题 这是图书馆https github com zarelaky panoramagl android tree master PanoramaGL https github com zare
  • 何时使用 HashMap 而不是 LinkedList 或 ArrayList,反之亦然

    为什么我们不能总是使用 HashMap 尽管它在添加 删除操作上比 ArrayList 或 LinkedList 高效得多 而且与元素的数量无关 我用 google 搜索了一下 发现了一些原因 但使用 HashMap 总有一种解决方法 而且
  • 获得令牌后如何从 Google Plus API 获取电子邮件地址

    我使用 oauth2 0 获得了 accesstoken 我能够获取人名 性别等 但无法获取用户的电子邮件地址 任何人都可以粘贴一些示例代码或任何有关如何从 google plus API 获取电子邮件地址的建议吗 如果用户明确授权您的应用
  • 匿名函数 C++

    我正在尝试使用该功能signal int void int from
  • 在 Emacs Lisp 中检查字符串是否以后缀结尾

    是否有一个函数可以检查字符串是否以某个子字符串结尾 Python 有endswith http docs python org 2 library stdtypes html highlight endswith str endswith
  • 如何在 Flask-Login 中实现 user_loader 回调

    我正在尝试使用 Flask 和Flask 登录 http packages python org Flask Login在 Flask 应用程序中实现用户身份验证的扩展 目标是从数据库中提取用户帐户信息 然后登录用户 但我遇到了困难 但是
  • jquery contenteditable 换行符

    我有一个内容可编辑区域 我正在尝试禁用输入 返回和移动输入来创建新段落 我使用下面的脚本进行此操作 但它同时禁用了所有按钮 我想做的是返回放置一个换行符 而不是转到一个新段落 content keypress function e retu
  • 如何编写行为类似于内置断言的自定义 PHPUnit 断言?

    我如何编写自定义断言 例如assertFoo expected actual 其行为类似于关于错误 堆栈跟踪 的内置断言 我目前定义了以下方法 在扩展的类中 PHPUnit Framework TestCase public static
  • SQL Server 存储过程中的返回值

    我有一个存储过程 其中有一个 if 语句 如果计数的行数大于0 则应设置唯一的输出参数 UserId to 0 但是它只返回查询第二部分的值 EmailAddress varchar 200 NickName varchar 100 Pas
  • 重新加载表单时如何保留文本框中的值

    我有一个非常简单的 vba 宏应用程序 由 2 个文本框和命令按钮组成 这个想法是用户需要在文本框中输入数值 然后单击按钮将其禁用 这样他们就无法更改该值 当表单重新加载时 数值会丢失 我必须重新输入另一个值 我想要的是当表单重新加载时 数
  • Sequelize 如何查找具有多个 where 子句和时间戳的行 > NOW()

    我该如何使用 Sequelize 来做到这一点 SELECT FROM sessions WHERE user id AND token AND expires gt NOW 这就是我想要做的 假设Session是一个 Sequelize
  • 将值添加到列表

    下面是我的代码 List
  • Twitter Bootstrap - row-fluid 的位置问题

    我目前正在使用 Twitter bootstrap 构建一个网站 这太棒了 我的布局使用 div class row div class span6 div div class span6 div div class span6 div d
  • 为什么调用 BitBlt 或 CopyRect 时会失去透明度?

    Problem 我正在尝试从 32x32 块复制TBitmap into a TPaintbox这是我的地图编辑器 但我似乎无法使透明度正常工作 见下图 注意 出于演示和测试的目的 我在 TPaintbox 下方放置了一个 TImage 这
  • Java 中什么时候必须有默认构造函数和参数化构造函数?

    很多时候我遇到一个异常 说 默认构造函数的实现丢失 很多时候 参数化构造函数的定义本身就可以完成所有工作 我想知道在什么条件下会发生这种情况 如果类中不存在构造函数 则在编译时添加一个默认构造函数 如果类中存在任何一个参数化构造函数 则在编
  • WordPress 迁移中主页未加载,所有其他页面均加载

    似乎还没有人遇到过这个问题 我刚刚将一个小型 WordPress 网站从 iPage 上的测试服务器空间迁移到 HostGator 上的客户端服务器 当我在新服务器上登录 WordPress 时 该网站显示正常 但如果我清除缓存并继续运行一
  • 无法调试 Android 应用程序

    我尝试在模拟器和设备上调试 Android 应用程序 但我总是收到消息 等待调试器 等待调试器附加到进程 我真的不知道如何设置环境和应用程序来运行调试 如果你们中的任何人能够提供任何有用的提示 我将非常感激 问题出在主机配置文件中 C Wi
  • 插入事务和参数?

    我正在学习 VB Net 需要使用开源 System Data SQLite ADO Net 解决方案来处理 SQLite 数据库 我在 HOWTO 部分找到的示例仅是 C 语言的 有人可以在 VB Net 中提供一个简单的示例吗 我可以研
  • 塔楼高度之间的最小差异?

    我正在做一些面试问题 我看到了这个 已知 n 座塔的高度和 k 值 您必须将每个塔的高度增加或减少 k 您需要最小化最长和最短塔的高度之间的差异并输出该差异 我想答案将是 maxheight k minheight k 我已经尝试过一些测试