week1-leetcode #1-Two Sum[Easy]

来源:互联网 发布:网络大电影播放量分红 编辑:程序博客网 时间:2024/05/22 17:10

leetcode #1-Two Sum[Easy]

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, 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].

Solution1[base]

time complecity: O(n2)

space complecity:O(n)

runtime:132ms

#include <vector>#include <iostream>using namespace std;class Solution {public:    vector<int> twoSum(vector<int>& nums, int target) {      int num_size = nums.size();      vector<int> return_vec;      for (int i = 0; i < num_size; i++) {        for (int j = i+1; j < num_size; j++) {          int num1 = nums[i];          int num2 = nums[j];          if (target == num1+num2) {            return_vec.push_back(i);            return_vec.push_back(j);            return return_vec;          }        }      }      return return_vec;    }};

思路:使用双重循环遍历vector,第一重循环确定第一个数字,第二重循环确定第二个数字,复杂度是O(n)O(n)=O(n2)

Solution2[optimal]

time complecity: O(n)

space complecity:O(n)

runtime:9ms

#include <vector>#include <iostream>// #include <ctime>#include <unordered_map>using namespace std;class Solution {public:    vector<int> twoSum(vector<int>& nums, int target) {      unordered_map<int, int> hash_map;      const int nums_size = nums.size();      vector<int> return_vec;      for (int i = 0; i < nums_size; i++)        hash_map[nums[i]] = i;      for (int i = 0; i < nums_size; i++) {        int num_to_find = target-nums[i];        // 找到了        if (hash_map.find(num_to_find) != hash_map.end() && hash_map[num_to_find] != i) {          return_vec.push_back(i);          int j = hash_map[num_to_find];          return_vec.push_back(j);          break;        }      }      return return_vec;    }};

思路:使用一个哈希表来存储每个值对应的索引信息。使用两次一重循环,第一次是建立哈希表,复杂度是O(n)。第二次是在哈希表中寻找特定数字,复杂度是O(1)O(n)=O(n)。总复杂度是O(n)+O(n)=O(n)

原创粉丝点击