数组中的最大绝对差

2023-12-20

我遇到了这个算法问题。我能够实现 O(n^2) 解决方案。有没有更好的方法在 O(n) 时间内做到这一点?

问题:

给你一个包含 N 个整数的数组,A1, A2 ,…, AN。返回最大值f(i, j)对全部1 ≤ i, j ≤ N. f(i, j)定义为|A[i] - A[j]| + |i - j|, where |x|表示x的绝对值。

Example:

A=[1, 3, -1]

f(1, 1) = f(2, 2) = f(3, 3) = 0
f(1, 2) = f(2, 1) = |1 - 3| + |1 - 2| = 3
f(1, 3) = f(3, 1) = |1 - (-1)| + |1 - 3| = 4
f(2, 3) = f(3, 2) = |3 - (-1)| + |2 - 3| = 5

所以,我们返回 5。

我的答案:

public class Solution {
    public int maxArr(ArrayList<Integer> A) {
        int maxSum = 0;

        for(int i=1; i<=A.size()-1; i++){
            for(int j=i+1; j<=A.size(); j++){
                int tempSum = sum(A.get(i-1), A.get(j-1), i, j);

                if(tempSum > maxSum) {
                    maxSum = tempSum;
                }
            }
        }

        return maxSum;
    }

    public int sum(int Ai, int Aj, int i, int j) {
        return Math.abs(Ai-Aj) + Math.abs(i-j);
    }
}

另外,在我的解决方案中,内部循环从 i + 1 运行到 N,因此该循环的最坏情况是 N-1。我的整体解决方案仍然是 O(n^2) 吗?


是的,你的解决方案仍然是O(N^2) as (N - 1) + (N - 2) + ... + 1 = N * (N - 1) / 2.

我将展示如何在线性时间内解决更一般的问题:给出 2D 空间中的点列表 (x[i], y[i]),找到两个最远的点(相对于曼哈顿距离)。

  1. 让我们找到以下点:max(x[i] + y[i])、max(-x[i] + y[i])、max(-y[i] + x[i]) 和 max(- x[i] - y[i]) 在所有 i 中。

  2. 让我们计算列表中每个点与上一步中选择的四个点之间的距离,并选择最大的一个。该算法显然在线性时间内工作,因为它考虑了4 * N点对。我声称这是正确的。

  3. 为什么?让我们固定一个点 (x[k], y[k]) 并尝试找到离它最远的点。考虑任意点 (x[i], y[i])。让我们扩大它们的坐标之间的差异的绝对值。我们假设它是x[i] + x[k] + y[i] + y[k] = (x[k] + y[k]) + x[i] + y[i]。第一项是常数。如果x[i] + y[i]不是所有中的最大值i, (x[i], y[i])不可能是最远的。其他三种情况(取决于展开式中 x[i] 和 y[i] 的符号)以相同的方式处理。

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

数组中的最大绝对差 的相关文章

  • 如何计算列表的最小不公平性总和

    我试图将问题陈述总结如下 Given n k和一个数组 列表 arr where n len arr and k is an integer in set 1 n inclusive 对于数组 或列表 myList 不公平总和定义为sum中
  • 生成字符串及其子字符串列表的排列的算法

    我已经忘记这个算法有一段时间了 假设我得到了字符串 cccaatt 我试图生成重复字母的每个子串的所有可能变体 EG cccaatt 作为输入将返回 猫 卡特 猫 卡特 ccat 卡特 卡特彼勒 卡特彼勒 cccat cccat cccaa
  • 用于整数分区的优雅 Python 代码 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我尝试编写代码来解决标准整数分区问题 维基百科 http en wikipedia org wiki Partition 28numb
  • 所有可能的骑士在普罗梅拉的棋盘上移动

    是否有可能用马从初始位置 I J 绕过大小为 N N 的棋盘 并且只访问每个方格一次 define A True A I J false active proctype method bit I 4 bit J 3 bit K 1 bit
  • 寻找下一个素数的最佳方法(Java)

    我被要求编写一个程序以最佳方式找到下一个素数 我编写了这段代码 但找不到最佳答案 有什么建议么 public static int nextPrime int input input now find if the number is pr
  • 给定一个点向量(可能无序),找到多边形(不是凸包)

    我目前有一个点向量 vector
  • 直观地执行不同的排序算法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 当平方和为N时,如何找到四个变量的所有可能值?

    A 2 B 2 C 2 D 2 N给定一个整数N 打印出整数值的所有可能组合ABCD求解方程 我猜我们可以比暴力做得更好 天真的暴力会是这样的 n 3200724 lim sqrt n 1 for a 0 a lt lim a for b
  • 神经网络的层和神经元

    我想更多地了解神经网络 我正在开发一个 C 程序来制作神经网络 但我坚持使用反向传播算法 很抱歉没有提供一些工作代码 我知道有很多库可以用多种语言创建神经网络 但我更喜欢自己制作一个 关键是我不知道要实现特定目标 例如模式识别或函数近似或其
  • 有效地合并两个数组 - 一个已排序,另一个未排序

    我正在解决一个问题 该问题有一个由 n 个元素组成的排序数组 后跟一个未排序的长度数组 O logn O 平方 n 如何最有效地对整个列表进行排序 在上述两种情况下我应该使用哪种排序 由于将单个元素插入数组并保持其排序是O n 你不可能变得
  • 线段树java实现[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 你知道 二进制 的良好实现吗线段树 http en wikipedia org wiki Segmen
  • 检查有效的 IMEI

    有人知道如何检查有效的 IMEI 吗 我找到了一个可以检查此页面的功能 http www dotnetfunda com articles article597 imeivalidator in vbnet aspx http www do
  • 分而治之算法找到两个有序元素之间的最大差异

    给定一个整数数组 arr 找出任意两个元素之间的差异 使得较大的元素出现在 arr 中较小的数字之后 Max Difference Max arr x arr y x gt y 例子 如果数组是 2 3 10 6 4 8 1 7 那么返回值
  • 如何在 C# 中以编程方式创建柔和的颜色?

    根据所需的颜色数量均匀分布地生成它们 如果指定的计数为 8 则看起来像这样 List
  • LRU算法,实现这个算法需要多少位?

    我有一个关于 LRU 算法的小问题 如果您有一个包含四个块的高速缓存 那么需要多少位来实现该算法 假设您指的是 4 路组关联缓存 完美 LRU 本质上是按照使用顺序为每一行分配一个精确的索引 您也可以将其视为 年龄 因此 4 个元素中的每一
  • 这个函数(for循环)空间复杂度是O(1)还是O(n)?

    public void check 10 for string i list Integer a hashtable get i if a gt 10 hashtable remove i 这是 O 1 还是 O n 我猜测 O n 但不是
  • 如何光栅化旋转矩形(通过 setpixel 在 2d 中)

    我有四个 2d 顶点 A B C D 的旋转矩形 我需要在像素缓冲区中 有效地 光栅化 绘制它 使用 setpixel x y 颜色 怎么做 我正在尝试使用一些代码 例如 convertilg a b c d do up down left
  • 求先递增后递减列表的最大值和最小值

    我尝试用谷歌搜索这个问题 但没有取得太大成功 我确信这个问题或类似问题有一个技术名称 但我似乎找不到答案 给定一个列表L整数 即严格递增 然后严格递减 找到该列表的最大值和最小值 例如 L可能 1 2 3 4 5 4 3 2 or 2 4
  • 贝尔曼福特算法可以有任意的边顺序吗?

    我刚刚开始学习新算法 但当我阅读 极客为极客而写的贝尔曼福特算法 时 我陷入了困境 http www geeksforgeeks org dynamic programming set 23 bellman ford algorithm h
  • JavaScript 中的埃拉托斯特尼筛法对大量数据无限运行

    我一直在尝试写埃拉托斯特尼筛法 http en wikipedia org wiki Sieve of EratosthenesJavaScript 中的算法 基本上我只是按照以下步骤操作 创建从 2 到 n 1 的连续整数列表 令第一个素

随机推荐

  • 为 Performance Point 仪表板设计器创建数据源时数据库不显示

    我设置了共享点服务器 仪表板运行良好 我的数据源也很棒 我正在尝试从不同的 SSAS 计算机添加新的数据源 当我输入服务器时 它甚至不会在数据库下拉列表中列出它 使用最初的 ssas 机器进行了此操作并使其正常工作 从我所看到的一切来看 新
  • Flex 容器的子容器的滚动宽度不正确

    根据w3学校 https www w3schools com jsref prop element scrollwidth asp The 滚动宽度 and 滚动高度属性返回元素的整个高度和宽度 包括不可见的高度和宽度 由于溢出 如果是这样
  • ES6/7 中可以导出 Arrow 函数吗?

    下面的导出语句出现语法错误 export default const hello gt console log say hello why 我只能导出命名函数 export function hello console log hello
  • 使用 html2pdf 时如何摆脱 css 中的左边距和上边距

    我正在使用 html2pdf 我想使用 css 去掉顶部和左边距 但我不能 在输出缓冲边距已设置为 0 之前 它适用于 html 但是当我使用它将其转换为 pdf 时html2pdf http html2pdf fr en default上
  • * 不支持的操作数类型:“numpy.ndarray”和“numpy.float64”

    长期读者 第一次作家 我在谷歌和堆栈溢出上进行了搜索 但并没有真正找到这个问题的一般答案 我在使用 numpy 1 6 2 的 python 2 7 3 中收到 numpy ndarray 和 numpy float64 不受支持的操作数类
  • 如何将网站封装在手机应用程序中?

    我见过很多手机应用程序只是打开一个网页而没有控件 只是页面 我正在寻找指导和链接来开始这样简单的事情 如果您想在 Android 中封装一个网站 您可以使用以下代码来实现 Roskvist https roskvist wordpress
  • F# 析构函数的等效项

    我正在将一个将非托管库包装的 C 类转换为 F 我遇到了重写随后的析构函数的看似简单的问题 class Wrapper P Invoke ellided private SomeType x public Wrapper x new Som
  • Xamarin 安卓 |布局样式

    我正在尝试创建这种布局样式 但仍然不知道该怎么做 有人可以帮助我吗 我需要主布局 并且在布局中必须位于左侧图像视图的颜色 接下来是带有填充父级描述的标题 右侧必须是 img 干得好 我为您设计了左侧标志 标题和描述标签以及右侧图像视图控件
  • 使用 Spring Boot 的 gRPC 和 REST 微服务

    对于一个项目 我想使用 Spring Boot 设置一个小型微服务场景 其中包含一个向客户端公开 REST 和 GraphQL 的 API 网关 一个 Eureka 服务注册表和三个服务 出于性能原因 我希望 API 网关后面的所有服务都能
  • 缺少节点-v57-linux-x64/grpc_node.node

    严格执行以下步骤时 https firebase google com docs admin setup https firebase google com docs admin setup 部署到我的服务器时 我收到此错误 2017 10
  • 非 ASCII 字符需要 web.config 吗?

    尝试制作我的第一个 ASP NET 页面 在 XP 上安装了 IIS 5 1 配置为运行 NET 4 创建了一个新的虚拟目录并添加了一个 aspx 文件 当我浏览该文件时 非 ASCII 字符已损坏 例如 U 00FC 会转换为 U 00C
  • 在 Woocommerce 3 中更改自定义订单状态的电子邮件主题

    我已成功更改 Woocommerce 处理订单的电子邮件主题 using 这个线程 https stackoverflow com a 48880997 3730754 add filter woocommerce email subjec
  • 使用 Selenium 等待元素加载

    我已经仔细查看了这里 但 web 元素等待似乎不适合我的代码 我对 Java 和 Selenium 相当陌生 我想尝试在超时之前将等待元素放入我的代码中 有什么建议么 当到达这个点时它就会崩溃 因为页面确实需要一段时间来搜索这个地址 Ste
  • ffmpeg API h264编码的视频不能在所有平台上播放

    Edit 在之前的版本中 我使用了非常旧的 ffmpeg API 我现在使用最新的库 问题仅略有变化 从 主要 变为 高 我正在使用 ffmpeg C API 在 C 中创建 mp4 视频 我希望生成的视频具有 约束基线 配置文件 以便生成
  • 如何使脚本加载和es6模块加载一起工作?

    这仅加载 jquery 一次 对于以下情况也是如此 但这会加载jquery两次
  • 跨多个 SQL 服务器的唯一 ID

    我正在开发一些将在全国多个实例中使用的软件 与许多使用登录的软件一样 我需要为每个用户提供唯一的 ID 该软件的每个实例都需要完全独立地运行 但最终很可能会合并一些数据库 在本例中 我希望每个用户的 ID 在所有服务器上都是唯一的 如果服务
  • 如何销毁/释放1个活动/布局中使用的资源?

    How do I release resources used in 1 activity So I got 3 layouts and activity for each layout but the problem is when I
  • 图像 Uri 到字节数组

    我目前有两项活动 一种用于从 SD 卡提取图像 另一种用于蓝牙连接 我使用 Bundle 来传输活动 1 中图像的 Uri 现在我想做的是获取蓝牙活动中的 Uri 并通过字节数组将其转换为可传输状态我已经看到了一些示例 但我似乎无法让它们为
  • ASP.NET Core 模型绑定错误消息 ASP.NET CORE 2.0 中的本地化

    在 ASP NET CORE 1 1 中 可以使用资源文件本地化模型绑定错误消息 并配置其选项以在 Startup cs 中为 ModelBindingMessageProvider 设置消息访问器 例如 services AddMvc o
  • 数组中的最大绝对差

    我遇到了这个算法问题 我能够实现 O n 2 解决方案 有没有更好的方法在 O n 时间内做到这一点 问题 给你一个包含 N 个整数的数组 A1 A2 AN 返回最大值f i j 对全部1 i j N f i j 定义为 A i A j i