`
m635674608
  • 浏览: 5043155 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

快速寻找满足条件的两个数

 
阅读更多
问题:快速找出一个数组中的两个数字,让这两个数字之和等于一个固定值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解。
 
解法1:直接枚举,计算两两数字之和,时间复杂度为O(N2)。
 
解法2:找sum-arr[i]是否存在。
对于每个数字arr[i],查找应对的sum-arr[i]是否在数组中,那么关键就在于如何提高查找的效率。
为了提高查找效率,我们可以将数组排序,这需要O(N*log2N)的时间,使用二分查找等方法进行查找,需要O(log2N),总的时间复杂度是O(N*log2N)。
另外,还有更快的查找方法:Hash表。给定一个数字,根据hash映射查找另一个数字是否在数组中,只需用O(1)时间。但这种方法需要额外增加O(N)的hash表存储空间。总体的算法复杂度为O(N)。
 
解法3:当题目要求返回两个下标时,则比较高效的办法是:先排序,然后在一个循环体里使用两个循环变量进行反向遍历,并且这两个变量遍历的方向是不变的,从而保证遍历算法的时间复杂度为O(n)。
首先对数组进行排序,时间复杂度为O(N*log2N)。
令i=0,j=n-1,看arr[i]+arr[j]是否等于sum,如果是,则结束,如果小于sum,则i++,如果大于sum,则j--。这样只需要在排好的数组上遍历一次,就可以得到最后的结果。
 
资料整理自《编程之美》
分享到:
评论

相关推荐

    c++-c++编程基础之leetcode题解第4题寻找两个正序数组的中位数.zip

    在本压缩包中,主题聚焦于C++编程基础与LeetCode算法题目的解析,特别是针对LeetCode中的第四题——寻找两个正序数组的中位数。这是一个经典的算法问题,旨在锻炼程序员对数组处理和排序算法的理解。下面我们将深入...

    多约束条件下智能飞行器航迹快速规划.docx

    新解的产生则通过路径交叉和变异操作,如两个解的点选取和节点交换,以适应约束并优化目标。 问题二引入了机动限制,需要估计路径的曲率半径以满足机动要求。这需要在路径规划时计算路径上的曲率,并找到满足条件的...

    素数回文数

    - 为了提高效率,代码中还包含了一些优化措施,如在遍历前对某些显然不满足条件的数字进行快速排除,避免不必要的计算。 综上所述,“素数回文数”的代码不仅展示了C语言的基本语法和控制结构,还涉及到了算法设计...

    c语言面试题之双指针两数之和-输入有序数组.zip

    本面试题探讨的是如何利用双指针找到输入有序数组中的两个数,使得它们的和等于一个特定的目标值。这个问题在算法设计和数据结构的学习中具有重要意义,因为它涉及到数组的遍历、条件判断以及效率优化。 首先,我们...

    根据Excel双列条件进行查找.rar

    标题提到的"根据Excel双列条件进行查找"指的是我们需要在两个独立的列中同时满足特定条件来筛选和查找数据。这种操作对于分析销售数据、跟踪业务员业绩或者客户消费情况等场景尤其有用。描述中提到的具体应用是寻找...

    两数之和 IV - 输入 BST(前序遍历+双指针)1

    这个问题的关键在于利用BST的特性将节点值有序化,然后通过双指针法在有序序列中快速找到符合条件的两个数。这个算法的时间复杂度是O(n log n),其中n是BST的节点数,主要消耗在排序上;空间复杂度是O(n),用于存储...

    二年级数学下册六两三位数的加法和减法2两位数减两位数课件苏教版20200306459

    例如,57-34,学生应该先观察两个数,57接近60,34接近30,所以57减去34大约会得到20多。同样的方法应用于其他题目,如67-38估计为30多,83-54估计为20多,83-45估计为30多。 接着,【示范解答】部分展示了如何运用...

    快速排序算法以及归并算法

    2. **递归调用**:在 `qSort` 方法中,首先检查 `from` 和 `to` 是否满足递归终止条件,即 `from - to >= 0`,如果是,则直接返回;否则,执行以下操作: - 调用 `pailie` 方法找到基准元素的正确位置,并将数组...

    最小范围程序的文档

    另一种方法是先对三个数组进行排序,然后对每个数组的每个元素,用二分查找法在其他两个数组中寻找满足条件的元素。这会降低时间复杂度到O(n log^2 n)。 在实际应用中,我们需要根据具体问题的规模和性能要求来选择...

    06-两数之和.md

    在具体实现时,可以使用JavaScript等编程语言编写函数,通过输入数组和目标值`n`,输出满足条件的两个数的索引或值。在实现过程中,要注重代码的清晰性和准确性,同时考虑边界情况和错误处理。 综上所述,掌握算法...

    给定一个只包含数字[0…9]的字符串,请使用字符中的某些字符,构建一个能够整除15的最大整数,注意字符中的每个字符只能使用一次

    // 寻找满足整除3,并且末尾是0或者5的最大数 for (int i = len; i >= 1; i--) { if (a[i].rest == 0 || a[i].rest == 2) { cout [i].x; } } return; } ``` 算法复杂性分析: 该算法的时间复杂度主要体现在...

    两个一字板后出击通达信指标公式源码.doc

    "两个一字板后出击"是一个特定的股票交易策略,这个策略基于通达信平台编写了一个指标公式源码,用于帮助投资者寻找符合该策略特征的股票。下面我们将详细解析这个策略和源码的关键知识点。 1. **策略条件**: - *...

    8642 快速排序.txt

    它首先检查起始索引是否小于结束索引,如果满足条件,则调用`Partion`函数进行分区操作,并得到基准值的新位置。然后,递归地对基准值左侧和右侧的子数组进行快速排序,直到整个数组排序完毕。 #### 主函数(main)...

    特殊数的整除特征定义.pdf

    特殊数的整除特征是帮助我们快速判断一个数是否可以被特定的数整除的规则。以下是一些主要的整除特征: 1. **被2整除**:如果一个整数的个位数是0、2、4、6或8,那么这个数可以被2整除。 2. **被3整除**:数的各个...

    小学奥数填数游戏PPT学习教案.pptx

    这增加了难度,因为学生需要同时考虑两个环和直线的条件。解决时可能需要用到试错和回溯法,同时分析数字之间的关联性。 5. **圆形填数**:题目05的每个圆需要填入四个数字,使得每个圆的和为21。这需要学生对数字...

    知识点035估算无理数的大小(解答).doc

    - 对于平方根,可以寻找最接近的完全平方数,然后确定无理数介于这两个平方数之间。例如,估算时,我们知道16,所以4<√17。 - 利用绝对值,如果要求的是绝对值小于某个数的整数,可以考虑该数的平方根,找出...

    c++哥德巴赫猜想之一

    我们将通过一个具体的代码示例来解析这一数学问题,并了解如何在程序中判断一个数是否为素数,以及如何寻找满足条件的素数组合。 知识点: 1. **哥德巴赫猜想**:哥德巴赫猜想是数论中的一个著名未解决问题,由...

    苏教一年级下册以内数的认识整理和复习PPT学习教案.pptx

    通过比较数的大小,孩子们可以学会如何找出两个数之间的差异。比较的顺序是从最高位开始,如果最高位相同,再依次比较下一位。例如,比较35和43时,首先比较十位,3小于4,因此35小于43。 在数的组成方面,孩子们...

Global site tag (gtag.js) - Google Analytics