LeetCode0001.两数之和

Posted kingr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode0001.两数之和相关的知识,希望对你有一定的参考价值。

题目要求

技术图片

 

 

算法分析

暴力算法,双循环迭代,即可找到满足条件的数组下标,时间复杂度为O(n2)。

 

优化算法,可以利用哈希表(C#用字典)在第一次迭代时先存储数组的数据,

这样第二次迭代检索数据时可以利用索引快速查找,实现了用空间换时间。

 

更优算法,不必要先存储再查找,可以边存数据,边查找。

 

 

代码展示(C#)

 1 public class Solution {
 2     public int[] TwoSum(int[] nums, int target) {
 3         var dic = new Dictionary<int, int>();
 4         for(int i = 0; i < nums.Length; i++)
 5         {
 6             if (!dic.ContainsKey(nums[i]))
 7             {
 8                 dic.Add(nums[i], i);
 9             }
10         }
11         for(int i = 0; i < nums.Length; i++)
12         {
13             int n = target - nums[i];
14             if (dic.ContainsKey(n) && dic[n] != i)
15             {
16                 return new int[2] { i, dic[n] };
17             }
18         }
19         return null;
20     }
21 }

 

代码展示(C++)

 1 class Solution {
 2 public:
 3     vector<int> twoSum(vector<int>& nums, int target) {
 4         unordered_map <int, int > map;
 5         vector<int> res;
 6         for (int i = 0; i < nums.size(); i++) {
 7             int n = target - nums[i];
 8             if (map.find(n) != map.end()) {
 9                 res.push_back(map[n]);
10                 res.push_back(i);
11                 break;
12             }
13             else {
14                 map[nums[i]] = i;
15             }
16         }
17         return res;
18     }
19 };

提交结果

技术图片

 

技术图片

 

以上是关于LeetCode0001.两数之和的主要内容,如果未能解决你的问题,请参考以下文章

学渣带你刷Leetcode0001.两数之和

编程艺术0001_两数之和_解法

leetcode-两数之和

0001 两数之和

Leetcode 1. 两数之和(带图)

LeetCode:两数之和