美文网首页
1. Two Sum

1. Two Sum

作者: YoungDayo | 来源:发表于2017-09-17 14:13 被阅读0次
愿每一天都阳光明媚

Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.

Example

Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

大致意思:输入一个数组和一个目标数,如果能在这个数组中找到两个元素的和等于目标数,那么就输出这两个数的下标,每次输入用例时,都保证只有一个结果,每个元素使用一次。

常规解法:两层循环嵌套,依次遍历,每两个元素都做一次相加运算看是否等于目标数,直到找到这样两个数,返回下标。时间复杂度太高。

/**
Note: The returned array must be malloced, assume caller calls free().
*/

int* twoSum(int* nums, int numsSize, int target) {
  int arr=(int *)malloc(sizeof(int)3);
  for(int i=0;i<numsSize;++i)
  {
    for(int j=i+1;j<numsSize;++j)
    {
        if(i!=j && nums[i]+nums[j]==target)
        {
            arr[0]=i;
            arr[1]=j;
            break;
        }
    }
  }
  return arr;
}

其他解法:
用哈希表,对数组进行一次遍历,每遍历数组中的一个元素,就用目标数减去该元素,看得到的结果是否存在哈希表中,如果不存在将该元素放入哈希表,继续遍历,直到找到结果在哈希表中,则找到这两个元素,返回对应下标。时间复杂度相对较低。

class Solution {
public:
  vector<int> twoSum(vector<int>& nums, int target) {
    vector<int> index;
    unordered_map<int, int> hash;
    for(int i=0; i<nums.size(); ++i) {
        auto it = hash.find(target-nums[i]);
        if(it != hash.end()) {
            index.push_back(min(i, it->second)+1);
            index.push_back(max(i, it->second)+1);
            return index;
        }
        else hash[nums[i]] = i;
    }
  }
};

相关文章

  • LeetCode 1. Two Sum (Easy)

    LeetCode 1. Two Sum (Easy) LeetCode 1. Two Sum (Easy) 原题链...

  • 1. Two Sum

    1. Two Sum 题目:https://leetcode.com/problems/two-sum/ 难度: ...

  • leetcode hot100

    1. Two Sum[https://leetcode-cn.com/problems/two-sum/] 字典(...

  • leetCode #1

    #1. Two Sum

  • 1. Two Sum

  • 1. Two Sum

    Given an array of integers, return indices of the two num...

  • 1. Two Sum

    Description Given an array of integers, return indices of...

  • 1. Two Sum

    Problem Given an array of integers, return indices of the...

  • 1. Two Sum

    Given an array of integers, return indices of the two num...

  • 1. Two Sum

    Leetcode: 1. Two SumGiven an array of integers, return in...

网友评论

      本文标题:1. Two Sum

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