美文网首页
1. 两数之和

1. 两数之和

作者: 不想当社畜 | 来源:发表于2019-03-02 21:00 被阅读0次

题目

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:


给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

解法一(自己的思路,一般人都会想到的方法,暴力求解)

使用多个循环进行求解

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> result;
        int temp = 0;
        for( int i=0;i < nums.size() ; ++i ){
            temp = target - nums[i] ; //判断差值在后面的数据中是否能找到
            for( int j=i+1;j < nums.size();++j){
                if(temp == nums[j]){
                    result.push_back(i);
                    result.push_back(j);
                    exit;
                }
            }
            if(result.size()>0) exit; // 只计算第一个满足的结果即可
        }
        return result;
    }
};

解析:
该方法
时间复杂度: O(n^2), 对于每个元素而言,通过遍历数组中的其他部分来寻找对应的目标元素,这将耗费O(n)的时间,然而对于每个元素都要耗费O(n)的时间,所以整体需要消耗O(N^2)的时间。
空间复杂度: O(1). 由于内存不会随随着元素的增多而增多。

解法二 (使用哈希表) 不熟 主要不太知道哈希表的概念是什么

使用了非排序的map进行查询确定要快点???

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
    unordered_map<int, int> hashmap;
    vector<int> res;
    
    for(int i = 0; i != nums.size(); i++)
    {
        int gap = target - nums[i];
        if(hashmap.find(gap) != hashmap.end())
        {
            res.push_back(i);
            res.push_back(hashmap[gap]);
            break;
        }
        hashmap[nums[i]] = i;
    }
    return res;  
    }   
};

复杂度分析:

时间复杂度: O(N). 只遍历了一遍列表中的n个元素,而在在unordered_map 查询的时间复杂度为O(log(n)),而hash_map查询时间复杂度为O(1).
空间复杂度: O(N). 需要额外的空间来存储取决哈希表中的元素数量,元素数量最大为n个.

知识点

哈希表 以(key , value)形式成对出现的数据结构,通过把关键字(key)映射到表中一个位置用来访问,以加快查找的速度。

map 与 哈希表不相同 。 c++ 的标准函数库中没有哈希表函数,故使用unordered_map函数 其查询时间复杂度为O(log(N)).

相关文章

  • 1. 两数之和

    https://leetcode-cn.com/problems/two-sum/description/给定一个...

  • 1. 两数之和

    内容 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每个输入只对应一种答案,且同样的元素...

  • 1. 两数之和

    20180919-摘抄自1. 两数之和 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每...

  • 1. 两数之和

    1、暴力法,求target-num[current]是否满足 2、哈希表

  • 1. 两数之和

    代码 分析 主要是利用map集合来存储值,存储的是下一下要找的值和当前的索引,然后找到的时候就可以知道这两个索引

  • 1. 两数之和

    一、题目原型: 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同...

  • 1.两数之和

    题目: 给定一个整数数列,找出其中和为特定值的那两个数。 你可以假设每个输入都只会有一种答案,同样的元素不能被重用...

  • 1.两数之和

    leetcode算法学习,打算每日1篇 自己写的代码太low就不上了,主要是对最优代码的注释和自己的小小理解 题目...

  • 1. 两数之和

    LeetCode 的算法题 PHP解法记录 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假...

  • 1. 两数之和

    https://leetcode-cn.com/problems/two-sum/description/给定一个...

网友评论

      本文标题:1. 两数之和

      本文链接:https://www.haomeiwen.com/subject/fqwyuqtx.html