【LeetCode1】-两数之和

方法一(暴力解法:双指针):

实现思路

先固定第一个数,然后在该数的后面一次遍历,直到两数之和相加等于目标值,返回下标

实现代码

class Solution {
    
    
public:
    vector<int> twoSum(vector<int>& nums, int target) {
    
    
        int n=nums.size();
        vector<int>re;
        for(int i=0;i<n-1;i++){
    
    
            for(int j=i+1;j<n;j++){
    
    
                if(nums[i]+nums[j]==target)
                {
    
    
                    re.push_back(i);
                    re.push_back(j);
                    return re;
                }
            }
        }
        return re;
    }
};

提交结果及分析

在这里插入图片描述

时间复杂度O(n^2)

方法二(哈希表)

在这里插入图片描述
遍历到某一数值时,查看target-数值的元素是否在hash表中,如果不在将该元素存入hash表中,利用该hash表判断,直到有两个元素相加等于target,返回下标即可

实现代码

class Solution {
    
    
public:
    vector<int> twoSum(vector<int>& nums, int target) {
    
    
        map<int,int> nmap;
        vector<int>re;
        int n=nums.size();
        for(int i=0;i<n;i++){
    
    
            if(nmap.count(target-nums[i])!=0)
            {
    
    
                re.push_back(i);
                re.push_back(nmap[target-nums[i]]);
            }
            else{
    
    
                nmap[nums[i]]=i;
            }
        }
        return re;
    }
};

提交结果及分析

在这里插入图片描述
时间复杂度为O(n)

猜你喜欢

转载自blog.csdn.net/weixin_44944046/article/details/112911280
今日推荐