Two Sum--leetcode

来源:互联网 发布:西安科技大学考研 知乎 编辑:程序博客网 时间:2024/05/21 09:55


            题目的意思就是在一个数组里面找到两个元素,它们的和与给定的期望值一样,返回值为两个元素的位置信息。


  • 第一种本能想法O(n2)的算法:

<span style="font-size:14px;">    vector<int> twoSum(vector<int>& nums, int target) {        int i=0;        int j=0;        int len=nums.size();        vector<int> ret;        for(i=0;i<len;i++)        {            for(j=i+1;j<len;j++)            {                if((nums[i]+nums[j])==target)                {                    ret.push_back(i);                    ret.push_back(j);                    return ret;                }            }        }        return ret;    }</span>

      Runtime: 564 ms 这种算法时间复杂度较高,搜了下网上发现居然有O(N)的解法

  • 第二种O(N)算法,利用哈希表辅助存储:
<span style="font-size:14px;"> vector<int> twoSum(vector<int>& nums, int target) {        int i=0;        int j=0;        int len=nums.size();        vector<int> ret;        map<int,int> listIndex;        map<int,int>::iterator it;        for(i=0;i<len;i++)        {            it =  listIndex.find(target-nums[i]);            if(it == listIndex.end())            {                listIndex[nums[i]]=i;            }            else            {                  ret.push_back(it->second);                  ret.push_back(i);                  return ret;            }                   }        return ret;    }</span>

  Runtime: 24 ms 从i=0到数组末尾依次进行遍历,当前位置为i,查找target-nums[i]是否在哈希表中,题目要求只需要找到一个解,因此能够满足要求。


0 0
原创粉丝点击