今天寫leetcode的 Two Sum這題一開始使用vector容器,而後使用algorithm裏的find函數進行查找,以下:app
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> res; for(int i=0;i<nums.size();i++) { int left = target - nums[i]; auto dis=find(nums.begin(), nums.end(),left); if(dis!= nums.end()) { if(dis-nums.begin()==i) dis= find(dis+1, nums.end(),left); if(dis!= nums.end()) { res.push_back(i); res.push_back(dis-nums.begin()); break; } } } return res; } };
發現會時間超時。後來改爲用unordered_map經過了函數
1 class Solution { 2 public: 3 vector<int> twoSum(vector<int>& nums, int target) { 4 unordered_map<int, int> mapping; 5 vector<int> result; 6 for(int i=0; i<nums.size();i++) 7 { 8 mapping[nums[i]]= i; 9 } 10 for(int i=0;i<nums.size();i++) 11 { 12 int gap= target-nums[i]; 13 if(mapping.find(gap) !=mapping.end() &&mapping[gap]>i) 14 { 15 result.push_back(i); 16 result.push_back(mapping[gap]); 17 break; 18 } 19 } 20 return result; 21 } 22 };
經過比較這,發現差別在find的函數使用spa
map底層是紅黑樹實現的,所以它的find函數時間複雜度:O(logn)code
而unordered_map底層是哈希表,所以它的find函數時間複雜度:O(l)blog
!!!!!!!注意map與unordered_map的區別!!!!leetcode
而algorithm裏的find函數是順序查找,複雜度爲O(n)get