赞
踩
题目链接:https://leetcode-cn.com/problems/two-sum/
题目如下:
解法一:
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> result; for(int i=0;i<nums.size();i++){ int number=target-nums[i]; for(int j=i+1;j<nums.size();j++){ if(nums[j]==number) { result.push_back(i); result.push_back(j); break; } } } return result; } };
解法二:
思路:
本题使用map,以下列出使用数组和set来做哈希法的局限。
1、数组的大小是受限制的,而且如果元素很少,而哈希值太大会造成内存空间的浪费。
2、set是一个集合,里面放的元素只能是一个key,而两数之和这道题目,不仅要判断y是否存在而且还要记录y的下表位置,因为要返回x 和 y的下表。所以set 也不能用。
此时就要选择另一种数据结构:map ,map是一种key value的存储结构,可以用key保存数值,用value在保存数值所在的下表。
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> result; unordered_map<int,int> umap; for(int i=0;i<nums.size();i++){ int rest=target-nums[i]; if(umap.count(rest)!=0){ result.push_back(umap[rest]); result.push_back(i); break; } else umap[nums[i]]=i; } return result; } };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。