首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从数组中找出两个相加为给定数的数的函数

可以使用双指针法来解决。双指针法是一种常用的解决数组问题的方法,它通过维护两个指针,一个指向数组的起始位置,一个指向数组的末尾位置,然后根据两个指针所指向的元素之和与给定数进行比较,从而确定指针的移动方向。

以下是一个示例的函数实现:

代码语言:txt
复制
def find_two_numbers(nums, target):
    # 对数组进行排序
    nums.sort()
    # 初始化左右指针
    left = 0
    right = len(nums) - 1

    while left < right:
        # 计算当前两个指针所指向的元素之和
        current_sum = nums[left] + nums[right]
        if current_sum == target:
            # 找到目标数对,返回结果
            return [nums[left], nums[right]]
        elif current_sum < target:
            # 当前和小于目标数,左指针右移
            left += 1
        else:
            # 当前和大于目标数,右指针左移
            right -= 1

    # 没有找到符合条件的数对,返回空列表
    return []

这个函数接受一个整数数组 nums 和一个目标数 target 作为输入,返回一个包含两个数的列表,这两个数的和等于目标数。如果找不到符合条件的数对,则返回一个空列表。

这个函数的时间复杂度为 O(nlogn),其中 n 是数组的长度。这是因为函数中使用了排序算法对数组进行排序,排序的时间复杂度为 O(nlogn),而双指针法只需要遍历一次数组,时间复杂度为 O(n)。

推荐的腾讯云相关产品:云函数 SCF(Serverless Cloud Function)。云函数是腾讯云提供的一种无需管理服务器即可运行代码的计算服务。您可以使用云函数 SCF 来部署和运行上述函数,实现在云端执行数组操作的需求。您可以通过腾讯云官网了解更多关于云函数 SCF 的信息:云函数 SCF

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

列表数组随机抽取固定数元素组成新数组或列表

列表数组随机抽取固定数元素组成新数组或列表 1:python版本:python里面一行代码就能随机选择3个样本 >>> import random >>> mylist=list(range...(1,10)) >>> mylist [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> newlist = random.sample(mylist, 3) #mylist随机获取3...个元素 >>> newlist [4, 7, 2] >>> newlist = random.sample(mylist, 3) #mylist随机获取3个元素 >>> newlist [4, 3...那么jQuery怎么随机选出固定数组数组[1, 2, 3, 4, 5, 6, 7, 8, 9]三个元素,并构造成新数组?...arr,随机返回num个不重复项 function getArrayItems(arr, num) { //新建一个数组,将传入数组复制过来,用于运算,而不要直接操作传入数组; var

6K10
  • 关于一个数组两个和等于给定数问题

    今天我遇到这样一个问题,问题描述如下:         给出一个数组,再给定一个target,如果数组中有两个和等于target,那么返回这两个索引,如果说有多对数都符合条件则返回第一对,返回结果用一个长度为...2数组保存,并且返回数组按升序排列:         如:[2,7,11,15]  target=9,那么返回[1,2],这只是一个最普遍例子,因为数组可以有重复,如[0,4,1,0 ] target...,但是新问题会出现,如果两个数相同的话,那么删除元素方法是不能够解决,基于上述无法解决问题,我们想到了map,mapkey保存数组,而value则存着是这个数索引,思路是当遍历到元素...,其实还可以扩展到三个,问题描述可以是这样,从一个数组找出三个索引,让他们和等于0,如果用穷举法的话,那么时间复杂度将达到o(n*n*n),但是如果运用上面的思路的话,遍历数组,选取一个作为...3个一个n,然后剩余找出两个和等于-n两个数,那么这样的话,时间复杂度会减少到o(n*n),并且如果再仔细斟酌,那么第一个遍历过都不会被算在内,那么程序将会更加快,这里只提供思路

    75920

    详解Leetcode关于malloc模拟开辟二维数组问题,涉及二维数组题目所函数各个参数解读

    相关题目介绍 最近博主一直再刷Leetcode上有关c语言题目,有些题目第一步就将我卡死了。为什么呢?因为题目中所函数参数具体含义我既然都不知道是什么意思。...涉及二维数组题目所函数各个参数解读 3. 二维数组每一维长度更新 二维数组模拟开辟 此题要求返回一个矩阵,我们都知道矩阵可以当作一个二维数组来看待。...同样需要注意是:pArr类型为int(* )[col]所以一般在做题时不使用此创建方法,但单纯模拟创建二维数组是没有问题。此方法动态开辟二维数组在内存是连续存放。...一维数组方式 同样以一个row * col二维数组为例 int* pArr=(int* )malloc(row * col * sizeof(int)); 相较于上面的两个方法这个就比较鸡肋了,既不能直接使用下标访问...而gridColSize指向是pArr中指针指向数组长度,所以*gridColSize便可当作矩阵

    13110

    2024-06-01:用go语言,给定一个0开始索引整数数组 nums 、两个正整数 k 和 dist 。 数组代价是该

    2024-06-01:用go语言,给定一个0开始索引整数数组 nums 、两个正整数 k 和 dist 。 数组代价是该数组第一个元素。...大体步骤如下: 1.创建两个堆结构 l 和 r,其中 l 是最大堆,r 是最小堆,所有元素取反存储。这两个堆用于维持子数组之间距离。...2.初始化堆 l 和 r,将数组 nums 一部分元素(前 dist+2 个)依次加入堆 l 。...3.对堆 l 进行调整,保持其大小不超过 k,如果超过则将多出部分元素堆 l 移至堆 r 。...4.遍历数组 nums,第 dist+2 个元素开始,进行子数组调整: • 移除 out 元素,根据其大小堆 l 或堆 r 移除。

    9720

    算法练习之三之和等于零

    找出所有满足条件且不重复三元组。...答案不可以包含重复三元组 例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求三元组集合为: [[-1, 0, 1],[-1, -1, 2]] 问题 什么情况下三个相加才会等于零...什么情况下三个相加不可能为零 如果在一组数据中最小两个数相加为正数,则这两个数和后面的相加不可能等于零 如果在一组数据中最小为正数,则该和其它数字相加不可能等于零 怎样判断会出现重复值 如果在一组数据中有两个数相等...代码思路 1、首先我们需要排序 2、循环我们数据 3、如果最小大于0直接结束循环 4、如果相邻数据相等则跳过循环,避免重复 5、如果三个相加等于零则存储到相应二维数组 上面的简单思路有一点我们需要注意...,就是这三个该怎么找,我们说3个必须是有正数和负 ,那么我们可以有一种办法每次找相加时,第三个正数挑选最大,如果结果仍然为正数,说明正数太大,应该选择一个小,即排好序数组倒数第二个数据

    1.2K40

    一线大厂Android面试题

    11、给定数组-1,0,1,0,-1,-4,0找出其中3个加为0全部组合,给出解决方案 12、判断单链表相交,找出节点,手写代码 13、反转单链表,手写代码 14、给定两个链表,存储着两个16进制...,链表一个节点存储着16进制其中一个,从高位到低位,求相加值,返回一个链表,链表中保存相加结果。...函数式编程优势?...,给出数据库实现,写关键sql语句 18、文件每行有一个手机号对应用户信息,给定手机号查找出对应信息,如果手机号排序了,怎么查?...用了二分法查,写了简单二分法实现 19、任意二叉树,求出其中最远两个节点间距离 20、对未来职业生涯规划?怎么去做有深度工程师?开发遇到困难?怎么解决?自己项目里做亮点!

    88820

    一文把三个经典求和问题吃透透滴。

    题目来源:leetcode 1.两之和(简单) 15.三之和(中等) 18.四之和(中等) 两之和 题目描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组找出和为目标值那...两个 整数,并返回他们数组下标。...双指针(暴力)法 解析 双指针(L,R)法思路很简单,L指针用来指向第一个值,R指针用来L指针后面查找数组是否含有和L指针指向值和为目标值。...三之和 题目描述: 给你一个包含 n 个整数数组 nums,判断 nums 是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复三元组。...找出所有满足条件且不重复四元组。 注意: 答案不可以包含重复四元组。 示例: 给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。

    58210

    【动画+图解】把经典求和问题吃得透透

    之和 题目描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组找出和为目标值两个 整数,并返回他们数组下标。 你可以假设每种输入只会对应一个答案。...哈希表法 解析 哈希表做法很容易理解,我们只需通过一次循环即可,假如我们 target 值为 9,当前指针指向值为 2 ,我们只需哈希表查找是否含有 7,因为9 - 2 =7 。...双指针(暴力)法 解析 双指针(L,R)法思路很简单,L指针用来指向第一个值,R指针用来L指针后面查找数组是否含有和L指针指向值和为目标值。...三之和 题目描述: 给你一个包含 n 个整数数组 nums,判断 nums 是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复三元组。...找出所有满足条件且不重复四元组。 注意: 答案不可以包含重复四元组。 示例: 给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。

    60830

    漫画算法题:两之和与三之和

    我们来举个例子,给定下面这样一个整型数组(假定数组不存在重复元素): ? 我们随意选择一个特定值,比如13,要求找出之和等于13全部组合。...我们以上面这个数组为例,选择特定值13,演示一下小灰具体思路: 第1轮,访问数组第1个元素5,把问题转化成后面元素找出和为8(13-5)两个数: ? 如何找出和为8两个数呢?...按照上一次所讲,我们可以使用哈希表高效求解: ? 第2轮,访问数组第2个元素12,把问题转化成后面元素找出和为1(13-12)两个数: ?...第3轮,访问数组第3个元素6,把问题转化成后面元素找出和为7(13-6)两个数: ? 以此类推,一直遍历完整个数组,相当于求解了n次两之和问题。 ?...这样说起来有些抽象,我们来具体演示一下: 第1轮,访问数组第1个元素1,把问题转化成后面元素找出和为12(13-1)两个数。 如何找出和为12两个数呢?

    64220

    面试常见算法题你会多少?

    找出根节点到目标节点路径 阿里2万多名员工按年龄排序应该选择哪个算法?...GC算法(各种算法优缺点以及应用场景) 蚁群算法与蒙特卡洛算法 子串包含问题(KMP 算法)写代码实现 一个无序,不重复数组,输出N个元素,使得N个元素和相加为M,给出时间复杂度、空间复杂度。...手写算法 万亿级别的两个URL文件A和B,如何求出A和B差集C(提示:Bit映射->hash分组->多文件读写效率->磁盘寻址以及应用层面对寻址优化) 百度POI如何试下查找最近商家功能(提示...两个不重复数组集合,求共同元素。 两个不重复数组集合,这两个集合都是海量数据,内存中放不下,怎么求共同元素?...一个文件中有100万个整数,由空格分开,在程序判断用户输入整数是否在此文件。说出最优方法 一张Bitmap所占内存以及内存占用计算 2000万个整数,找出第五十大数字?

    1.5K20

    Leetcode Solutions(一) two-sum

    题目 给定一个整数数组和一个目标值,找出数组中和为目标值两个数。 你可以假设每个输入只对应一种答案,且同样元素不能被重复利用。...nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 解题思路 Go a + b = target 也可以看成是 a = target - b 在map[整数]整数序号...,所以先要将原来数组深拷贝一份,然后排序。...然后在排序后数组两个数使它们相加为target。这个思路比较明显:使用两个指针,一个指向头,一个指向尾,两个指针向中间移动并检查两个指针指向和是否为target。...如果找到了这两个数,再将这两个数在原数组位置找出来就可以了。 要注意一点是:在原来数组找下标时,需要一个从头找,一个尾找,要不无法通过。

    31740

    LeetCode-15 三之和

    题目描述 给定一个包含 n个整数数组 nums,判断 nums是否存在三个元素 a, b, c ,使得 a+b+c=0?找出所有满足条件且不重复三元组。...先将数组进行排序(排序函数时间复杂度为 O(nlgn)),然后我们就可以对这个有序数组用双指针方法左右两边向中间扫描了: 对于有序数组之和,我们就是找到左右指针指向之和等于 target...就可以了; 对于有序数组之和,我们可以先固定一个(即为 target),然后就是找到左右指针指向之和等于 target就可以了。...在遍历查找过程中有几点需要值得注意: 题目要求答案不可以包含重复三元组,因此需要去重处理 由于数组已排序,当固定数字大于零(即为 target>0)时,则它后面的都大于零,不需要继续查找 java...,当nums[i]>0,则它后面的都大于零,不需要继续查找 if (nums[i] > 0) break; // 在数组查找两个数与

    88520

    2024-01-03:用go语言,给你两个长度为 n 下标 0 开始整数数组 cost 和 time, 分别表示 n 堵不

    2024-01-03:用go语言,给你两个长度为 n 下标 0 开始整数数组 cost 和 time, 分别表示 n 堵不同墙刷油漆需要开销和时间。...墙壁刷油漆。 答案2024-01-03: 来自左程云。 灵捷3.5 大体过程如下: paintWalls1 函数 1.paintWalls1 函数是基于递归方法解决方案。...2.在 process1 函数,通过递归方式将每种情况下最小开销计算出来。 3.递归调用时考虑两种情况,选择当前墙刷或者不刷,计算出最小开销。...4.该方法在递归调用过程可能会有很多重复计算,效率可能不高。 paintWalls2 函数 1.paintWalls2 函数采用了记忆化搜索方式。...paintWalls3 函数 1.paintWalls3 函数采用了动态规划方式。 2.使用一个一维数组 dp 保存不同墙最小开销。

    16820

    Leetcode-Solutions 1.two-sum (Python&Golang)

    Two Sum 题目 给定一个整数数组和一个目标值,找出数组中和为目标值两个数。 你可以假设每个输入只对应一种答案,且同样元素不能被重复利用。...因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 解题思路 1 Go a + b = target 也可以看成是 a = target - b 在map整数整数序号...,所以先要将原来数组深拷贝一份,然后排序。...然后在排序后数组两个数使它们相加为target。这个思路比较明显:使用两个指针,一个指向头,一个指向尾,两个指针向中间移动并检查两个指针指向和是否为target。...如果找到了这两个数,再将这两个数在原数组位置找出来就可以了。 要注意一点是:在原来数组找下标时,需要一个从头找,一个尾找,要不无法通过。

    79490
    领券