leetcode167:两数之和|| - 输入有序数组

题目链接:167. 两数之和 II - 输入有序数组 - 力扣(LeetCode)

复制代码
class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        int left = 0, right = numbers.size() - 1;
        while(left <= right)
        {
            if(numbers[right] == target - numbers[left])
            {
                return {left + 1, right + 1};
            }
            else if(numbers[right] > target - numbers[left])
            {
                right--;
            }
            else
            {
                left++;
            }
        }
        return {-1, -1};
    }
};

这个题目,其实有两复杂度的算法,一个是nlogn 一个是n 我这个代码复杂度是n

为什么这道题要用复杂度为n呢,其实我们分析一下nlogn和n谁大,这个是要分区间来讨论的,首先当n < 10的时候,nlogn肯定小于n, 当n = 10的时候,两个相等,当n大于10的时候,这时候nlogn是大于n的,所以来看,我们这道题实际上用复杂度n会更好

代码讲解:这个题目实际上就是和双指针的结合,这个代码为什么我要用 numbers[right] > target - numbers[left]而不是用numbers[right] + numbers[right] > target,这个问题也就好比我们用二分的时候,用left + (right - left) / 2 而不是用(left + right)/ 2这个道理是一样的,为了防止加法超出int范围

这个代码就是把left定在数组的最左边,right定在数组的最后边,然后去寻找,当numbers[left] + numbers[right] > target 的时候,这个时候肯定是让right--,因为你想想,你要是right++,那必定是大于target的,同理numbers[left] + numbers[right] < target的道理一样。

相关推荐
天赐学c语言5 分钟前
12.18 - 有效的括号 && C语言中static的作用
数据结构·c++·算法·leecode
季远迩11 分钟前
LeetCode 热题 100 Python3易懂题解(更新中)
算法·leetcode·哈希算法
CoovallyAIHub12 分钟前
从“模仿”到“进化”!华科&小米开源MindDrive:在线强化学习重塑「语言-动作」闭环驾驶
深度学习·算法·计算机视觉
xie_pin_an24 分钟前
C 语言排序算法全解析:从原理到实战,附性能对比
c语言·算法·排序算法
CoovallyAIHub26 分钟前
SAM 真的开始「分割一切」,从图像到声音,Meta 开源 SAM Audio
深度学习·算法·计算机视觉
Dream it possible!29 分钟前
LeetCode 面试经典 150_回溯_组合(99_77_C++_中等)
c++·leetcode·面试·回溯
三斗米29 分钟前
从思维链到思维树:一步步解锁大语言模型的推理能力
算法
前端小L43 分钟前
贪心算法专题(二):波动中的智慧——只取极值「摆动序列」
数据结构·算法·贪心算法
aini_lovee43 分钟前
基于Jousselme距离改进D-S证据理论matlab实现
开发语言·算法·matlab
白兰地空瓶1 小时前
你以为树只是画图?不——它是算法面试的“隐形主角”
前端·javascript·算法