从数组中查找三角形

2024-05-29

给出由 N 个整数组成的零索引数组 A。三元组 (P, Q, R) 是三角形,如果且

A[P] + A[Q] > A[R], 
A[Q] + A[R] > A[P], 
A[R] + A[P] > A[Q]. 

例如,考虑数组 A,使得

A[0] = 10    A[1] = 2    A[2] =  5
A[3] =  1    A[4] = 8    A[5] = 20

三元组 (0, 2, 4) 是三角形。 写一个函数

int triangle(const vector<int> &A);

给定一个由 N 个整数组成的零索引数组 A,如果该数组存在三角形三元组,则返回 1,否则返回 0。

假使,假设:

N是[0..100,000]范围内的整数; 数组 A 的每个元素都是 [-2,147,483,648..2,147,483,647] 范围内的整数。 例如,给定数组 A,使得

A[0] = 10 A[1] = 2 A[2] = 5 A[3] = 1 A[4] = 8 A[5] = 20 该函数应返回 1,如上所述。给定数组 A 使得 A[0] = 10 A[1] = 50 A[2] = 5 A[3] = 1 该函数应返回 0。 预期最坏情况时间复杂度:
预期最坏情况空间复杂度:O(1)


第一次索赔

首先,没有必要考虑非正数。如果至少有一个数字为负数或零,则不可能实现三角不等式。这是显而易见的,但这里有证据:

假设 A、B、C 服从三角不等式,而 C

  • A + C > B。因此 A > B。
  • B + C > A。因此 B > A。

(矛盾)。

第二项索赔

假设A、B、C服从三角不等式,而C是A、B、C中最大的。那么对于 A、B 和 C 之间的每个 A2 和 B2 - 它们也将遵守三角不等式。

换句话说:

  • A、B、C 服从三角不等式。
  • C >= A
  • C >= B
  • C >= A2 >= A
  • C >= B2 >= B
  • 那么A2,B2,C也服从三角不等式。

证明很简单,足以明确地写出不等式。

其结果是,如果 C 是您要查找三角不等式的最大数 -您应该只检查集合中不超过 C 的两个最大数字,并检查是否 A + B > C。

第三项主张

如果 0 = A*2。

证明也很简单:A + B = A*2

算法

  1. 选择 2 个最大的数字 B 和 C (B
  2. Pick the largest number A not exceeding B, such that
    • A
    • 确保它与 B,C 不是同一元素
    • 仅考虑正整数。
    • 如果无法选择这样的数字 - 完成。 (没有三角形)。
  3. 检查A、B、C是否满足三角不等式。测试是否 A + B > C(如果是则完成)。
  4. 丢弃最大的数 C。代入 C = B,则 B = A。
  5. 转到步骤 2。

第四项主张

上述算法在最大整数大小上是对数的。换句话说,它与数据类型位数呈线性关系。最坏情况的复杂度是独立的关于输入长度。因此 - 输入长度为 O(1)。

Proof:

在每次迭代(未找到解决方案)时,我们都有 A 新C。这意味着每两次迭代后,最大数字至少会小 2 倍。

显然,这给了我们迭代次数的上限。给定我们的整数受到 31 位的限制(我们忽略负数),而最小有趣的最大 C 是 1,这给我们的结果就是 2 * (31 - 1) =60次迭代.

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

从数组中查找三角形 的相关文章

  • 遍历后加快数组查找速度?

    我有一个123MB大的int数组 它基本上是这样使用的 private static int data new int 32487834 static int eval int c int p data c 0 p data p c 1 p
  • 是否可以使静态控件透明?

    我正在尝试实现一个静态控件 该控件刷新 更改文本 以响应每秒发生一次的某个事件 由于我不想每秒绘制整个客户区域 所以我决定使用静态控件 现在的问题是父窗口被蒙皮 这意味着它有自定义位图作为背景 而静态控件没有适应 所以我正在寻找使静态控件的
  • HTML 文档

    有没有一个工具可以从 VS2010 生成的 XML 文档文件生成 HTML 页面 我在谷歌上搜索了这样的工具 但没有找到 我下载并安装了SandCastle 但我不明白如何使用它 尝试使用Sandcastle 帮助文件生成器 http sh
  • 在子目录中构建共享库

    我正在尝试构建一个使用一些 C 代码的 R 包 我有一个编译为可执行文件的 C 库 可以从命令行调用 有一个与之关联的 Makefile 我正在尝试获取信息here http cran r project org doc manuals R
  • 用 C# 中的字典中的值替换字符串中的单词

    我有一个简单的dictionary像这样 var fruitDictionary new Dictionary
  • VS2010中VSHost.exe不断启动

    我正在 VS2010 中使用一个包含大量项目的解决方案 但它不断变得无响应 我注意到的一件事可能是一条线索 尽管我尚未开始任何调试 但 MyApplicationName vshost exe 不断出现在进程列表中 也许每当构建发生时它就会
  • 持续运行的 C# 代码 - 服务还是单独的线程?

    我有一个 NET 4 Web 应用程序 它有 3 个关联的独立项目 DAL BAL 和 UI 我正在使用实体框架进行数据库交互 我有代码循环遍历一堆数据库数据 根据找到的内容调用方法 然后更新数据库 我希望这段代码一直运行 同时 我希望用户
  • 第三方引用的 dll 未被复制来构建

    我有一个第三方 net dll 被我的 dll 类库项目 A 引用和使用 我的控制台应用程序项目 B 引用项目 A 我的问题是第三方 dll 没有被复制到控制台应用程序项目 B 的构建中 这里有什么问题呢 我的 dll 类库中引用的第三方
  • UWP - 绑定枚举差异

    我遇到了一个非常有趣的问题 假设 UWP 应用中有以下 XAML 页面内容
  • Excel 2007 中的数值 - 底层 xml 文件中的表示与存储

    这个问题与 NET和OpenXml有关 我已经阅读了以下文章 它有很好的解释 但没有回答我的问题 Excel 2007 中数值的可视化与底层 xml 文件不一致 https stackoverflow com questions 58594
  • 如何让 PCRE 与 C++ 一起使用?

    这是一个新手问题 但我希望我能尽可能清楚地表达我的问题 我正在尝试用 C 进行模式匹配 我已经从以下位置下载了 PCRE 的 Win32 版本here http gnuwin32 sourceforge net packages pcre
  • 如何在 C++ 中初始化嵌套类的构造函数

    我在初始化嵌套类构造函数时遇到问题 这是我的代码 include
  • 剥离 OLE 标头信息 (MS Access / SQL Server)

    我有一个 C 应用程序需要支持二进制数据库内容 图像等 当使用 MS Access 或 MS SQL Server 时 此数据被包装在 OLE 对象内 如何去除此 OLE 标头信息 请注意 我不能只查找特定标签的开头 因为内容可以是 png
  • 如何通过 Excel 互操作对象自动调整列大小?

    下面是我用来将数据加载到 Excel 工作表中的代码 但我希望在加载数据后自动调整列的大小 有谁知道自动调整列大小的最佳方法 using Microsoft Office Interop public class ExportReport
  • Subsonic 3 ActiveRecord 嵌套选择导致 NotIn 错误?

    我有以下 Subsonic 3 0 查询 其中包含嵌套的 NotIn 查询 public List
  • 是否可以在 Eclipse 中为除 Java 之外的 Eclipse 编写插件?

    谁能帮我用c 写一个eclipse插件 weekens 和 celavek 感谢您提供的信息 我正在研究 JNI 并将尝试实现它 celavek 我们必须做什么样的主控 控制 在C 和java接口中处理是否风险更大 我的要求是在 Java
  • 矩阵行列式算法 C++

    我是编程新手 我一直在寻找一种找到矩阵行列式的方法 我在网上找到了这段代码 但我很难理解这里的算法 我对递归的基础没有问题 但继续和主循环我很难理解 非常感谢任何可以向我解释该算法的人 int determ int a MAX MAX in
  • 预览MouseMove 与 MouseMove

    我有相当多的 XAML 经验 但最近我注意到我的大多数同事都使用预览鼠标移动代替鼠标移动事件 我一直用鼠标移动它对我很有帮助 但我忍不住问我什么时候应该使用预览鼠标移动什么时候鼠标移动 有什么区别 各自有什么优点和缺点等等 PreviewM
  • 从不同的线程访问对象

    我有一个服务器类 它基本上等待来自客户端的连接 在该类中 我创建了一个 NetworkStream 对象 以便能够从客户端接收字节 由于 NetworkStream Read 方法不是异步的 这意味着它将等到从客户端读取字节才能继续执行类似
  • 如何从与 C# lambda 集成(而非代理集成)的 Amazon API 网关获取正确的 http 状态代码?

    我正在使用 C lambda 与 API 网关集成 我希望 API 网关返回正确的错误代码 例如 400 404 500 等 API网关模块tf文件 provider aws version lt 2 70 0 region var aws

随机推荐

  • Windows Azure AppFabric 访问控制服务 (ACS) 中的 OAuth 2.0 身份提供程序

    OAuth 2 0 委派包含在 Azure AppFabric 访问控制服务中 http blogs objectsharp com cs blogs steve archive 2011 04 11 windows azure acces
  • Mysql关于重复键更新+子查询

    使用这个问题的答案 需要 MySQL INSERT SELECT 查询具有数百万条记录的表 https stackoverflow com questions 662877 need mysql insert select query fo
  • Visual Studio 在哪里存储调试时使用的默认浏览器?

    我使用 Firefox 作为默认浏览器 但在 Visual Studio 中工作时 我想在调试时启动 IE 我们都知道 在MVC应用程序中 没有办法选择默认浏览器 除非您添加一个Web表单文件 右键单击它 选择浏览方式 然后强制将浏览器设置
  • 使用函数重载进行解构

    我正在尝试创建一个函数 该函数需要一对坐标或一个对象x and y属性并返回邻居列表 但由于某种原因 即使我检查了它的类型 我也无法解构该对象 interface Coords x number y number public getNei
  • Javascript 将对象推送为克隆

    我将 d3 用于交互式网络应用程序 我需要绑定的数据在交互过程中发生变化 并且由 JSON 变量中的一些选定对象组成 为此 我在 JSON 变量上使用了映射 并进行了一些查询来选择适当的对象 对象被推送到列表中 并且该列表被绑定为新数据 我
  • 如何通过不同的接口路由 TCP/IP 响应?

    我有两台机器 每台机器都有两个有效的网络接口 一个以太网接口eth0和 tun tap 接口gr0 目标是使用接口在机器 A 上启动 TCP 连接gr0但然后让机器 B 的响应 ACK 等 通过以太网接口返回 eth0 因此 机器 A 发出
  • 禁用 com.google.android.maps.MapView 中的平移/缩放

    如何禁用 MapView 的平移 缩放功能 不是缩放控件 我想要一个完全静态的地图 我还注意到触摸地图似乎不会触发 MapView onClickListener 有人可以详细说明为什么吗 对于 Android 版 Google Maps
  • actions-on-google-dialogflow-session-entities-plugin 在dialogflow的内联编辑器中不起作用

    我无法使用以下插件在内联编辑器中创建会话实体 actions on google dialogflow session entities plugin 我声明了变量 包 const sessionEntitiesHelper require
  • Django:模拟模型上的字段

    如何将模拟对象分配给该模型上的用户字段 无论如何都要绕过 SomeModel user 必须是 User 实例 检查吗 class SomeModel models Model user models ForeignKey User 我不会
  • 如何在React Native的MapView中设置标记

    我想在React Native中的MapView上设置一个标记 但是通过官方文档找不到任何信息MapView https facebook github io react native docs mapview html content 如
  • jquery悬停一次?

    jquery 使悬停函数执行一次然后停止的方法是什么 one 不起作用 button color 2 hover function dosmth 谢谢 Hover http api jquery com hover 绑定处理程序鼠标输入 h
  • 如何使用 CSS 或 jQuery 设置第一个和最后一个 li 的样式?

    我如何设计第一个 顶级 li和最后一个 顶层 li使用 CSS 还是 jQuery 我正在使用 CSS 设置第一个li但它也是造型第一li在每个中学阶段ul 那么我怎样才能让它只设置样式li其中包含 Main 1 最后一个包含 Main 6
  • 在 String 值之后打印 int 值

    我有以下示例代码 int pay 80 int bonus 65 System out println pay bonus bonus pay 有人可以向我解释一下为什么我得到以下输出 145 6580 您的代码正在从左到右解释表达式 pa
  • 如何从字符串中分离字符和数字部分

    例如 我想分开 OS234 to OS and 234 AA4230 to AA and 4230 我使用了以下简单的解决方案 但我确信应该有一个更有效和更强大的解决方案 private void demo string cell ABCD
  • 使用机器人框架进行 ATDD

    我想听听其他人使用 Robot Framework 进行自动化验收测试的经验 它的主要优点和缺点是什么以及与其他框架 主要是 Fitnesse 和 Selenium 的比较 将测试的代码是实时的遗留代码 主要是 C 语言 在我撰写本文时 我
  • 如何使用r中的dplyr在特定位置插入空白行

    我想在数据框中的特定位置插入空白行 我的数据框是这样的 dat lt data frame group c rep A 1 rep B 4 rep C 2 rep D 2 group 1 A 2 B 3 B 4 B 5 B 6 C 7 C
  • 将应用程序部署到 IBM liberty Profile 时执行 CICS 请求时出错

    我有一个应用程序 如果我将它 在我的本地 部署到 WAS 中 它可以完美运行 但是 如果将其部署到 IBM J9 VM 版本 pwa6470 27sr2fp10 20141218 02 SR2 FP10 中的 Liberty Profile
  • aws log get-log-events --log-group-name 问题

    我尝试使用 aws 日志检索日志 但 aws cli 命令未正确处理日志组名称 aws logs get log events log group name aws lambda mySkillName log stream name 20
  • 所有可能的 GOOS 价值?

    如果我做对了 GOOS在编译源代码时确定 为了更好地支持多个操作系统 我感兴趣的是GOOS可能 当然 Go 是开源的 所以它可能有无限的可能性 所以我真正想要的是一个 通用列表 已知值为 windows linux darwin or fr
  • 从数组中查找三角形

    给出由 N 个整数组成的零索引数组 A 三元组 P Q R 是三角形 如果且 A P A Q gt A R A Q A R gt A P A R A P gt A Q 例如 考虑数组 A 使得 A 0 10 A 1 2 A 2 5 A 3