美文网首页
1、两数相加

1、两数相加

作者: MR_Model | 来源:发表于2019-08-17 20:43 被阅读0次

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

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

    示例:

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

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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/two-sum
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    解题思路:
    1.暴力求解:
    如题,需要在一个nums数组中找到和为target的两个整数的下标,最简单的思路就是通过二重遍历,遇到这种情况的时候,直接输出当时的两个下表值。

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

    运行结果: 执行时间:228 ms 执行内存:9.2 MB

    2.使用空间换取时间的解法。
    首先,暴力法做了很多的无用功,枚举出了所有的方法,时间复杂度应该在 n*n。
    首先,计算值的和,需要数组的值;输出下标,需要数组的下标。我们需要建立一个值和下标的关系。其中最简单的应该就是哈希表,即map。

    我们在一次循环的时候,将实际情况分成两种情况:
    我们首先创建一个map,用来存储遍历过后的值和下标的关系。
    1.首先计算出,需要数字X,可以和当前的值Y加起来得到target
    2.然后在map中查找是否存在数字X
    3.不存在,将当前的值Y和Y的下标存在map中,其中Y为key值,Y的下标为value值。
    4.如果存在这样的值,则直接输出数字X对应的下标,同时当前的值Y的下标,完成任务。
    5.如果一直不存在,直接输出空数组。

    class Solution {
    public:
        vector<int> twoSum(vector<int>& nums, int target) {
            vector<int>res;
            map<int, int> tmp;
            for (int i =0 ; i < nums.size(); i++) {
                int temp = target - nums[i];
                if (tmp.find(temp) != tmp.end()) {
                    res.push_back(tmp.find(temp)->second);
                    res.push_back(i);
                    break;
                } else {
                    tmp.insert(std::pair<int,int>(nums[i], i));
                }
            }
            return res;
        }
    };
    

    运行结果: 执行时间:8 ms 执行内存: 10.1 MB

    相关文章

      网友评论

          本文标题:1、两数相加

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