码迷,mamicode.com
首页 > 其他好文 > 详细

1、Two Sum

时间:2016-05-03 17:30:43      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:

question: 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.

Example:

        Given nums = [2, 7, 11, 15], target = 9,

        Because nums[0] + nums[1] = 2 + 7 = 9,
        return [0, 1].

题目的大概意思是:给你一个包含整型数据的数组,返回两个数组中两个数字的序号,使得他们的值相加等于一个给定的target,我们假设每个输入都会得到一个正确答案
         
第一种方法(最容易想到的):
C语言描述,LeetCode代码如下:

/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target) {
  int *p = (int *)malloc(2 * sizeof(int)); // 注意:分配空间,如果用数组返回会出错

  int i, j;
  for(i = 0; i < numsSize - 1; i++)
  {
    int num = target - nums[i];
    for(j = i+1; j < numsSize; j++)
      if(num == nums[j])
      {
        p[0] = i;
        p[1] = j;
        return p;
      }
  }
  return p;
}

分析程序:对于数据量很大的整型数组,时间复杂度O(n^2), 空间复杂度O(1)


第二种方法:
C++描述, LeetCode代码如下:

class Solution {
  public:vector<int> twoSum(vector<int>& nums, int target)
    {
     vector<int> vec;
    map<int, int> m;
    for(int i = 0; i < nums.size(); i++)     // 用map来做
      m[nums.at(i)] = i;
    for(int i = 0; i < nums.size(); i++)
    {
      int flag = target - nums.at(i);
      if(m.find(flag) != m.end() && m[flag] != i)   // 判断flag是否在m中, 而且不是当前值 
      {
        vec.push_back(i);
        vec.push_back(m[flag]);
        return vec;
      }
    }
    return vec;
  }
};

分析程序:对于数据量很大的整型数组,采用这种方法更好,时间复杂度O(n), 空间复杂度O(n)

1、Two Sum

标签:

原文地址:http://www.cnblogs.com/wkx12/p/5455552.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!