(哈希)两数之和(leetcode 1)
1.題目
給定一個整數數組 nums 和一個整數目標值 target,請你在該數組中找出 和為目標值 target 的那 兩個 整數,并返回它們的數組下標。
你可以假設每種輸入只會對應一個答案。但是,數組中同一個元素在答案里不能重復出現。
你可以按任意順序返回答案。
示例 1:
輸入:nums = [2,7,11,15], target = 9
輸出:[0,1]
解釋:因為 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
輸入:nums = [3,2,4], target = 6
輸出:[1,2]
示例 3:
輸入:nums = [3,3], target = 6
輸出:[0,1]
提示:
2 <= nums.length <= 104
-109 <= nums[i] <= 109
-109 <= target <= 109
只會存在一個有效答案
進階:你可以想出一個時間復雜度小于 O(n2) 的算法嗎?
2.分析與解答
2.1基礎知識
map是STL的一個關聯容器。
map<string,int> cnt;//前鍵后值,鍵就可以理解為索引,每個索引只能在map中出現一次
map中修改數據:
int i = my_Map[“a”];
my_Map[“a”] = i;//索引a對應的值是i
map中的count()函數: 返回索引出現的次數,由于map中索引只出現一次,所以返回只會是0或1.
a[i],其實提供了一個i到a[i]的映射
map中的count()函數,能夠判斷鍵是否出現過,同時map中的鍵和值也能夠擁有其原本的意義。
但是用數組就有了局限性,因為如果把a[i]當成一個i到a[i]的映射,那么無法判斷a[i]是否出現過。所以說一個數組作為映射的話比map作為映射表示的內涵要少。
2.2思路
給定一個整數數組 nums 和一個整數目標值 target,請你在該數組中找出 和為目標值 target 的那 兩個 整數。
也就是說,在數組里有兩個數a和target-a,需要輸出他們的下標。
解決的思路:
2.3代碼(c++)
class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {map<int,int> a;//提供一對一的hashvector<int> b(2,-1);//用來承載結果,初始化一個大小為2,值為-1的容器bfor(int i=0;i<nums.size();i++){if(a.count(target-nums[i])>0)//如果找到一個數是target-nums[i]{b[1]=i;b[0]=a[target-nums[i]];//讀出它對應的下標break;}a[nums[i]]=i;//把這個數和它的下標存在map里}return b;}; };總結
以上是生活随笔為你收集整理的(哈希)两数之和(leetcode 1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CATIA连接盘实体设计
- 下一篇: 只提取单元格中的数字_提取Excel单元