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

在一个范围内找到数组的第一个和的算法

,可以使用双指针法来解决。

双指针法是一种常用的数组遍历技巧,通过维护两个指针,分别指向数组的起始位置和结束位置,不断调整指针的位置来寻找目标值。

具体步骤如下:

  1. 初始化两个指针,一个指向数组的起始位置,一个指向数组的结束位置。
  2. 计算当前指针范围内的数组元素和,如果和等于目标值,则返回该和。
  3. 如果和小于目标值,则将起始指针向右移动一位,增大和的值。
  4. 如果和大于目标值,则将结束指针向左移动一位,减小和的值。
  5. 重复步骤2至4,直到找到目标值或者起始指针超过结束指针。

这种算法的时间复杂度为O(n),其中n为数组的长度。

以下是一个示例代码:

代码语言:txt
复制
def find_first_sum(nums, target):
    start = 0
    end = len(nums) - 1

    while start < end:
        current_sum = nums[start] + nums[end]
        if current_sum == target:
            return [nums[start], nums[end]]
        elif current_sum < target:
            start += 1
        else:
            end -= 1

    return None

这个算法可以应用于多种场景,例如在一个有序数组中寻找两个数使其和为目标值,或者在一个无序数组中寻找两个数使其和为目标值。

推荐的腾讯云相关产品是云服务器(CVM),它提供了弹性计算能力,可以满足各种规模的业务需求。您可以通过以下链接了解更多关于腾讯云服务器的信息:腾讯云服务器产品介绍

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

相关·内容

数组特性妙用!如何找到「缺失第一个正数」

作者 | P.yh 今天分享题目来源于 LeetCode 第 41 号问题:缺失第一个正数。题目难度为 Hard。本文使用了一个比较 Trick 解法。...题目描述 给定一个未排序整数数组,找出其中没有出现最小正整数。...数组应该是属于一类最最基础数据结构,除去 length 之外,就只有两个属性 index value,那这道题就变成了 如何利用数组 value index 之间关系来找到最小缺失正整数...如果继续想下去有几点是可以明确: 缺失正整数肯定在 [1, array.length + 1] 这个范围内 我们可以交换输入数组元素位置来让 index value 关系更加明确 保证...总的来说这道题并没有涉及什么算法和数据结构应用,有点像脑筋急转弯感觉,想到了就做出,想不到的话就做不出,但是它给我们解数组问题提供了一个方向:利用 index value 对应关系来辅助求解

93620

☆打卡算法☆LeetCode 34、排序数组中查找元素第一个最后一个位置 算法解析

一、题目 1、算法题目 “给定一个升序排列整数数组一个目标值,找出给定目标值书中开始位置结束位置。” 题目链接: 来源:力扣(LeetCode) 链接:34....排序数组中查找元素第一个最后一个位置 - 力扣(LeetCode) (leetcode-cn.com) 2、题目描述 给定一个按照升序排列整数数组 nums,一个目标值 target。...找出给定目标值在数组开始位置结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 进阶: 你可以设计并实现时间复杂度为 O(log n) 算法解决此问题吗?...首先,判断target开始位置结束位置,就是要找数组第一个等于target位置第一个大于target位置减一。...然后,可能target不存在数组中,所以需要判断得到两个位置是否符合条件,不符合就返回[-1,-1]。

33030
  • 算法初学者第一个数据结构,数组vector

    区分算法和数据结构 我在学习算法以及大家讨论过程当中发现了一个很有意思现象,很多人虽然知道算法和数据结构并不是同一个范畴,但是往往在理解时候会把它们当做同一个东西来理解。...实际上正规数据结构书籍当中,一般不会单独将数组作为一个数据结构进行介绍。取而代之是线性表,线性表表明存储结构是线性。...链表相比,数组优势在于极快元素访问速度以及明确长度,我们可以 O(1) 时间内访问数组任意一个元素。而链表则不行,需要 O(n) 。...另外数组实现简单,几乎可以说是上手可用,而链表实现debug非常复杂。 C++当中,很多大佬喜欢使用vector代替数组。除了支持末尾插入、弹出元素之外,vector还拥有丰富api。...关于数组基本知识就介绍这么多,下一篇我们将会迎来基于数组第一个算法,也是最经典算法——二分。

    66630

    排序数组中查找元素第一个最后一个位置

    排序数组中查找元素第一个最后一个位置 给定一个按照升序排列整数数组 nums,一个目标值 target。找出给定目标值在数组开始位置结束位置。...如果数组中不存在目标值 target,返回 [-1, -1]。 进阶:你可以设计并实现时间复杂度为 O(log n) 算法解决此问题吗?...nums 数组中二分查找得到第一个大于等于 target下标(左边界)与第一个大于target下标(右边界); # 2、如果左边界<= 右边界,则返回 [左边界, 右边界]。...target下标 ,否则找到第一个大于target下标 if nums[middle] > target or (lower and nums[middle] >=...nums 数组中二分查找得到第一个大于等于 target下标leftBorder; # 2、 nums 数组中二分查找得到第一个大于等于 target+1下标, 减1则得到rightBorder;

    4.7K20

    LeetCode-34-排序数组中查找元素第一个最后一个位置

    # LeetCode-34-排序数组中查找元素第一个最后一个位置 给定一个按照升序排列整数数组 nums,一个目标值 target。找出给定目标值在数组开始位置结束位置。...你算法时间复杂度必须是 O(log n) 级别。 如果数组中不存在目标值,返回 [-1, -1]。...0时,直接返回[-1,1] 当数组长度为1时,判断第一个数字是否等于target,等于则返回[0,0],否则返回[-1,-1] 初始化头尾指针 移动头指针,直到找到第一个等于target位置,如果找完了都没有找到...,返回[-1,-1] 移动尾指针,直到找到最后一个等于target位置,如果找完了都没有找到,返回[-1,-1] 当头尾指针相同时,说明只有一个target,返回当前位置[start,start]或[...,这时候只需要查找另外一个边界等于target即可,可以进行循环移动查找,最后返回[start,end]即可 如果没有找到,返回[-1,-1] 方法3、递归分治(low): 通过二分查找切分数组寻找左右子数组

    2.2K20

    LeetCode题目34:排序数组中查找元素第一个最后一个位置

    原题描述 + 给定一个按照升序排列整数数组 nums,一个目标值 target。找出给定目标值在数组开始位置结束位置。 你算法时间复杂度必须是 O(log n) 级别。...leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array 思路解析 + 毫无疑问,时间复杂度O(log n)升序数组...普通二分查找找到target后立即返回,所以我们需要做变式,情况分为以下两种。 寻找左边界 还是得举个例子。...因为lower左边不是target,而higher也一直尽可能往左挪动。 寻找右边界 与上面过程相反,我们尽可能向右挪动lower,让其与higher相撞即可。...但如果复用上面的逻辑,每次挪动时令lower=mid+1,那么最终lower一定会与higher相撞于最后一个target一个位置。此时lower-1才是所求。

    3.1K20

    排序数组中查找元素第一个最后一个位置

    前言 今天主要讲解内容是:如何在已排序数组中查找元素第一个最后一个位置。以 leetcode 34 题作为例题,提供二分查找解题思路,供大家参考。...题目详述 给定一个按照升序排列整数数组 nums,一个目标值 target。找出给定目标值在数组开始位置结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。...同查找元素第一个位置类似,找到数组中某元素值等于目标值 target 时,不立即返回,通过增大查找区间下边界 low (令 low = mid + 1),不断向 mid 右侧收缩,最后达到锁定右边界...举栗 以 nums = [5,7,7,8,8,10], target = 8 为栗子,通过下图来找出目标值 8 在数组中出现第一个最后一个位置。...查找元素第一个最后一个位置代码: // C语言版本 int GetTargetPosition(int* nums, int numsSize, int target, int locFlag)

    2.6K20

    leetcode34-排序数组中查找元素第一个最后一个位置

    前言 今天刷题目是:排序数组中查找元素第一个最后一个位置,这道题目最开始AC以后,然后做了两步优化操作,供大家参考。...题目 leetcode-34:排序数组中查找元素第一个最后一个位置 分类(tag):二分查找这一类 英文链接:https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array...nums,一个目标值 target。...找出给定目标值在数组开始位置结束位置。 你算法时间复杂度必须是 O(log n) 级别。 如果数组中不存在目标值,返回 [-1, -1]。...至于找最右侧下标就是,将left=mid+1,来去逼近最右侧下标; 如果没有找到则说明不存在返回-1; 示例 这里举一个例子帮助大家理解,对于数组[1,2,4,4,4,4,4,5,6],找4最左下标

    2.6K30

    leetcode-34-排序数组中查找元素第一个最后一个位置

    题目描述: 给定一个按照升序排列整数数组 nums,一个目标值 target。找出给定目标值在数组开始位置结束位置。 你算法时间复杂度必须是 O(log n) 级别。...: vector searchRange(vector& nums, int target)  说明: 1、这道题给定一个vector一个target,vector中装着升序一个数组...,比如[5,7,7,8,8,10], 要求找到target比如8,vector中起始位置结束位置。...算法时间复杂度要求是O(logn)级别的。 如果在vector中找不到target,那么返回[-1,-1]。 2、这道题又是一道二分法题目,不过是二分法一个变种。...这个元素一个元素,也就是一串target元素中第一个

    3.5K40

    Leetcode No.34 排序数组中查找元素第一个最后一个位置

    一、题目描述 给定一个按照升序排列整数数组 nums,一个目标值 target。找出给定目标值在数组开始位置结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。...进阶: 你可以设计并实现时间复杂度为 O(log n) 算法解决此问题吗?...-109 <= target <= 109 二、解题思路 使用二分法查找第一个位置,初始化两个变量low=0,hight=nums.length-1 1、当low>high时,表示没有找到,返回-1...nums[mid]时,说明目标值左侧,往左侧递归查找,否则往右侧递归查找 查找最后一个位置同理,唯一不同是第4、5步 4、假如nums[mid]等于target且nums[mid]比相邻右侧元素小...mid-1]<nums[mid])){ return mid; } if(target<=nums[mid]){ //寻找第一个位置

    1.9K10

    排序数组中查找元素第一个最后一个位置--题解

    排序数组中查找元素第一个最后一个位置 给定一个按照升序排列整数数组 nums,一个目标值 target。找出给定目标值在数组开始位置结束位置。...如果数组中不存在目标值 target,返回 [-1, -1]。 进阶: 你可以设计并实现时间复杂度为 O(log n) 算法解决此问题吗?...示例 3: 输入:nums = [], target = 0 输出:[-1,-1] 提示: 0 <= nums.length <= 105 -109 <= nums[i] <= 109 nums 是一个非递减数组...func searchRange(nums []int, target int) []int { if len(nums) == 0 { return []int{-1, -1} } //找到头...mid - 1 } else if nums[mid] == target { end = mid } else { start = mid + 1 } } //此处防止数组第一个数是

    1.9K30

    JavaScript数组求和_js获取对象数组第一个元素

    大家好,又见面了,我是你们朋友全栈君。 您如何找到其元素总和?好吧,解决方案是一个array.reduce()方法。...如果 reduce()方法调用中提供了 initialValue,则总数将等于 initialValue,而 currentValue 将类似于数组第一个值。...如何在JS示例中找到数组 让我们定义一个具有五个值数组,然后使用array.reduce()方法找到数组总和。...我们对数组所有整数求和。 现在,它在幕后作用是,第一种情况下,初始值为0,而第一个元素为11。因此,11 + 0 = 11。 第二个循环中,我们旧值为11,下一个值为21。...最后一个循环中,我们旧值为97,下一个值为18,因此97 + 18 = 115。 因此,这就是将数组所有元素求和方式。

    6.9K20
    领券