LeetCode-1

2019/03/31

今天开始在LeetCode上刷题,第一道只会普通的解法,先记录下来,以后有新的想法再改进。

时间复杂度O(n2),空间复杂度O(1)

 1 vector<int> twoSum(vector<int>& nums, int target) {
 2         vector<int> returnVector;
 3                 
 4         for (vector<int>::size_type i = 0; i < nums.size(); ++i)
 5         {
 6             for (vector<int>::size_type j = i + 1; j < nums.size(); ++j)
 7             {
 8                 if (target == nums[i] + nums[j])
 9                 {
10                     returnVector.push_back(i);
11                     returnVector.push_back(j);
12                     return returnVector;
13                 }
14             }   
15         }
16         
17         return returnVector;
18     }

执行效果如下:

 

-----------------------------------------------------------2019/05/08更新----------------------------------------------------------------------

方法二:在遍历整数数组时将元素插入哈希表,利用哈希表查找时间复杂度为O(1)的特性,减少了另一个值下标的查找时间。

时间复杂度O(n),空间复杂度O(n)。

 1 vector<int> twoSum(vector<int>& nums, int target) {
 2     vector<int> returnVector;    //保存对应值数组下标
 3     map<int, int> numIndexMap;    //数组元素值nun到对应下表的map  
 4         
 5     for (int i = 0; i < nums.size(); ++i) {
 6         if (numIndexMap.find(target - nums[i]) == numIndexMap.end()) {    //查看target-num不在map中
 7             numIndexMap[nums[i]] = i;    //插入当前元素    
 8         } else {
 9             returnVector.push_back(numIndexMap[target - nums[i]]);
10             returnVector.push_back(i);
11             return returnVector;
12         }
13             
14     }
15         
16     return returnVector;
17 }

 

posted @ 2019-03-31 23:05  zpchya  阅读(105)  评论(0编辑  收藏  举报