• Two Sum


    https://leetcode.com/problems/two-sum/

    给定一个数组a, 一个数 T,问数组 a 中是否存在两个数之和等于 T,如果有则返回这两个数的下标

    1. 最简单的方法

    从第一个数开始逐一与后面的数相比,判断两个数的和是否等于T;

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

    1.1 分析:

    从第一个数开始,每个数逐一与后面的数进行比较,每次需要比较 n-1 次,总共有 n 个数,因此时间复杂度为 (O(n^2)),而且这里不需要额外的空间存储,仅需要一个作为下标返回的vector,因此空间复杂度为 (O(1));


    2. 利用哈希表

    哈希表具有 O(1) 的查找复杂度,可以将总体的时间复杂度从 (O(n^2))降低到(O(n)),但是需要一个(O(n))的空间来存储哈希表;

    class Solution {
    public:
        vector<int> twoSum(vector<int>& nums, int target) {
            unordered_map<int, int> hash;
            vector<int> result;
            for (int i = 0; i < nums.size(); ++i)
            {
                if (hash.count(target-nums[i]))
                {
                    result.push_back(hash[target-nums[i]]);
                    result.push_back(i);
                    return result;
                }
                hash[nums[i]]=i;
            }
            return result;
        }
    };
    
  • 相关阅读:
    jsonp 的 post
    js replace常用用法
    zindex
    x秒前
    手写jsonp
    webview 冒泡慢?
    人民币大写转阿拉伯数字
    checked
    Deadlock Troubleshooting Trace 1222
    [转]基于LUCENE实现自己的推荐引擎
  • 原文地址:https://www.cnblogs.com/qiulinzhang/p/12520609.html
Copyright © 2020-2023  润新知