写在前面:大家好!我是 原题链接:LeetCode 1.两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 给定 nums = [2, 7, 11, 15], target = 9 最简单的思路就是暴力解题了,我们可以使用两层for循环遍历整数数组nums,直到遍历完整个数组。先建立一个空的vector ans,如果有连个数 i 和 j,使得 i + j = target,那么就将两个数的下标添加到ans中并返回。如果遍历完整个nums数组都找不到那么就直接返回空的ans。 因为是使用的两层for循环,所以该方法的时间复杂度为:O(n^2) 上一个思路虽然很容易就可以想到了,但是时间复杂度为O(n^2)。比较高,时间复杂度再低一点我们可以使用C++中STL的map,map是一种有序无重复的关联容器,底层实现是一个红黑树(一种严格意义上的平衡二叉树),其查找的时间复杂度为O(log(n))。使用map可以将时间复杂度从 O(n^2)降低到了O(nlog(n)),但是我们可以进一步的降低时间复杂度。我们可以使用C++中STL的unordered_map,unordered_map是一种无序的map,其底层实现为哈希表,其查找的时间复杂度为O(1)。 使用unordered_map解题的时间复杂度为:O(n)。 未完待续,持续更新中……
ACfun
,我的昵称来自两个单词Accepted
和fun
。我是一个热爱ACM的蒟蒻。最近萌生了刷LeetCode的想法,所以我打算按照题号从LeetCode第一个题目开始做起,攻陷LeetCode。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正,感谢大家的不吝赐教。我的唯一博客更新地址是:https://ac-fun.blog.csdn.net/。非常感谢大家的支持。一起加油,冲鸭!
用知识改变命运,用知识成就未来!加油 (ง •̀o•́)ง (ง •̀o•́)ง
题目信息
题目描述
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]解题思路
暴力解题
思路
有关vector的使用可以看一下我之前的博客:C++STL之vector详解时间复杂度
解题代码(C++)
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> ans; int size = nums.size(); for(int i = 0;i < size-1;i++){ for(int j = i + 1;j < size;j++){ if(nums.at(i) + nums.at(j) == target){ ans.push_back(i); ans.push_back(j); return ans; } } } return ans; } };
提交情况
hashmap解法
思路
所以我们可以使用unordered_map来解这道题目,使用它我们又可以进一步的降低时间复杂度,将时间复杂度由O(nlog(n))降到了O(n)。
我们每次只寻找第二个数nums[i],那么第一个数就为aim = target – nums[i],在遍历到nums[i]时如果我们建立的unordered_map中没有aim,即 target – nums[i] != aim,那么就将 nums[i] 作为键(key),将 nums[i] 的下标作为值存储到unordered_map中,继续循环遍历,直到遍历完整个nums。
时间复杂度
解题代码(c++)
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int,int> hash; int numsSize = nums.size(); for(int i = 0;i < numsSize;i++){ int aim = target - nums[i]; if(hash.count(aim)){ return {hash[aim],i}; } hash[nums[i]] = i; } return {}; } };
提交情况
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算