zoukankan      html  css  js  c++  java
  • 【LeetCode】1.两数之和

    题目

    给定一个整数数组 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 = new vector<int>;
            for(int i=0;i<nums.size();i++) {
                for(int j=i+1;j<nums.size();j++) {
                    if(nums[i] + nums[j] == target) {
                        result->push_back(i);
                        result->push_back(j);
                        return *result;
                    }
                }
            }
            return *result;
        }
    };

    时间复杂度:O(n^2)
    空间复杂度:O(1)

    Hash表

    思路

    target-nums[i]作为索引,i作为值,构成哈希表。

    函数读入一个值,查询哈希表中该值作为索引的项。
    如果存在,则返回索引对应的值和被查询索引在数组中的下标。
    

    代码

    class Solution {
    public:
        vector<int> twoSum(vector<int>& nums, int target) {
            map<int, int> hash;
            for(int i=0;i<nums.size();i++) {
                map<int ,int>::iterator l_it;
                l_it = hash.find(nums[i]);
                if(l_it == hash.end()) {
                    hash.insert(pair<int, int>(target-nums[i], i));
                }
                else {
                    return vector<int>({l_it->second, i});
                }
            }
            return vector<int>({0, 0});
        }
    };

    时间复杂度:O(n) 空间复杂度:O(n)

  • 相关阅读:
    Hdu 1257 最少拦截系统
    Hdu 1404 Digital Deletions
    Hdu 1079 Calendar Game
    Hdu 1158 Employment Planning(DP)
    Hdu 1116 Play on Words
    Hdu 1258 Sum It Up
    Hdu 1175 连连看(DFS)
    Hdu 3635 Dragon Balls (并查集)
    Hdu 1829 A Bug's Life
    Hdu 1181 变形课
  • 原文地址:https://www.cnblogs.com/tiumo/p/12667465.html
Copyright © 2011-2022 走看看