首页 > 其他分享 >两数之和 II - 输入有序数组-双指针

两数之和 II - 输入有序数组-双指针

时间:2024-07-02 21:27:33浏览次数:23  
标签:right int ret II numbers left 两数 指针

题目描述:

个人题解:

        初始时两个指针分别指向第一个元素位置和最后一个元素的位置。每次计算两个指针指向的两个元素之和,并和目标值比较。如果两个元素之和等于目标值,则发现了唯一解。如果两个元素之和小于目标值,则将左侧指针右移一位。如果两个元素之和大于目标值,则将右侧指针左移一位。移动指针之后,重复上述操作,直到找到答案。

        在整个移动过程中,控制左指针不能移到右指针的右侧,右指针不能移到左指针的左侧,因此不会把可能的解过滤掉。由于题目确保有唯一的答案,因此使用双指针一定可以找到答案。

重点:

1.如果左指针先到达下标 i 的位置,此时右指针还在下标 j 的右侧,sum>target,因此一定是右指针左移,左指针不可能移到 i 的右侧。

2.如果右指针先到达下标 j 的位置,此时左指针还在下标 i 的左侧,sum<target,因此一定是左指针右移,右指针不可能移到 j 的左侧。

3.注意if-else if-else的使用。

代码实现:

int* twoSum(int* numbers, int numbersSize, int target, int* returnSize) {
    int* ret = (int*)malloc(sizeof(int) * 2);
    *returnSize = 2;

    int left = 0,right = numbersSize-1;
    while(left < right)
    {
        if(numbers[left] + numbers[right] == target)
        { 
            ret[0] = left + 1, ret[1] = right + 1;
            return ret;
        }
        else if(numbers[left] + numbers[right] < target)
            left++;
        else
            right--;
    }

    ret[0] = -1, ret[1] = -1;
    return ret;
}

复杂度分析:

时间复杂度:O(n),其中 n 是数组的长度。两个指针移动的总次数最多为 n 次。

空间复杂度:O(1)。

标签:right,int,ret,II,numbers,left,两数,指针
From: https://blog.csdn.net/qq_45031559/article/details/140136623

相关文章

  • 第二十六天 第七章 回溯算法 part04 491.递增子序列 46.全排列 47.全排列 II
    491.递增子序列将其看作一个二叉树,可以知道,在二叉树每层中,不能取相同的元素。这题最主要要理解这个点。使用unordered_set对其进行降重。classSolution{public:vector<vector<int>>res;vector<int>cur;voidbacktracking(vector<int>&nums,intindex){......
  • 复旦大学2023--2024学年第二学期高等代数II期末考试情况分析
    一、期末考试成绩班级前几名的同学施想(95)、侯煜天(94)、刘升(92)、洪临依(92)、王龙晨(92)、文俊(90)、徐亦闵(89)、邓海斌(89)、褚乐一(89)二、总评成绩计算方法作业成绩根据交作业的次数决定。本学期提交作业共13次,10次100分,少1次扣10分。总评成绩=作业成绩*15%+期中成绩*......
  • UCOS-III 系统配置
    1.µC/OS-III功能配置(os_cfg.h)os_cfg.h用于确定应用程序所需的µC/OS-III功能,详细如下: 1.1杂项OS_CFG_APP_HOOKS_EN:启用/禁用应用程序特定的钩子。OS_CFG_ARG_CHK_EN:启用/禁用参数检查。OS_CFG_CALLED_FROM_ISR_CHK_EN:启用/禁用中断服务程序(ISR)检查。OS_CFG_DB......
  • 复旦大学2023--2024学年第二学期(23级)高等代数II期末考试第七大题解答
    七、(10分) 设$V$是$n$阶实矩阵全体构成的实线性空间, $A$是$n$阶正定实对称阵.对任意的$X,Y\inV$,定义二元函数$(X,Y)=\mathrm{tr}(XAY')$.(1)求证:$(-,-)$是$V$上的一个内积.(2)在上述内积下,$V$成为一个欧氏空间. 设$P,Q\inV$,$V$上的线性算子$......
  • C++定义函数指针,回调C#
    C++定义函数指针。typedefint(__stdcall*delegate_func)(inta,intb);暴露接口:int__stdcallCPPcallCSharp(delegate_funcfunc);方法实现:int__stdcallCPPcallCSharp(delegate_funcfunc){returnfunc(1,2);}头文件calculator.h#ifndefLIB_CALCULATOR_H#defin......
  • (nice!!!)LeetCode 3164. 优质数对的总数 II(数组、哈希表)
    3164.优质数对的总数II思路:先找出可以被k整除的nums[i].方法一:统计因子。1、找出数组nums1每个元素的因子,用哈希表来记录每个因子出现的次数。然后再遍历数组nums2进行累加即可。classSolution{public:constintN=1e6+10;longlongnumberOfPairs(vec......
  • C++(函数指针)
    目录基本语法示例常见用途注意事项函数指针是指向函数的指针,它保存了函数的地址,可以通过它调用指向的函数。函数指针在C++中具有多种用途,例如回调函数、动态函数调用以及实现多态等。基本语法函数指针的声明语法如下:返回类型(*指针名)(参数列表);示例声明和定义一个函数......
  • C++仿SKData实现C原生指针管理
    template<typenameT>classHBData{public:HBData(T*other_data,size_tother_size,boolrelease):data(other_data),size(other_size),isDeepCopy(release){}HBData(constHBData&other){if(isDeepCopy&&data)......
  • 代码随想录算法训练营第四十三天 | 52.携带研究材料 518.零钱总和II 377.组合总和IV 7
    完全背包有N件物品和一个最多能被重量为W的背包,第i间物品的重量为weights[i],价值为value[i],每件物品都有无限个,求解将哪些物品装入背包里,物品价值总和最大遍历顺序:纯完全背包问题(即求装满背包后的最大价值)先遍历背包先遍历物品都是可以的和零一背包求解的最大不同就是遍历顺序......
  • 【算法炼金术】让数字起舞:两数相加的C++艺术
    【算法炼金术】让数字起舞:两数相加的C++艺术一、引言:编织数字的魔法二、技术概述:数字的交响乐章技术定义核心特性代码示例:原味经典三、技术细节:数字的幕后故事原理解析难点剖析四、实战应用:数字的舞台秀应用场景问题与解决方案问题:大数相加易溢出五、优化与改进:数字......