1.兩數之和
阿新 • • 發佈:2020-06-28
1.兩數之和 原題連結
題解
在陣列中找到一組陣列使得他們的和為目標值,最容易想到的方式是暴力的做法,直接利用兩個迴圈
程式碼如下:
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { int n=nums.size(); int i,j; for(i=0;i<n-1;++i){ for(j=i+1;j<n;++j) if(nums[i]+nums[j]==target){ return {i,j}; } } return{i,j}; } };
上述的方法的時間複雜度為O(n^2),時間複雜度較高,因此我們可以優化內層迴圈,使用雜湊表的方式
程式碼如下:
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { if(nums.size() == 0) return {}; unordered_map<int, int> m; for(int i = 0; i < nums.size(); ++i){ int t = target - nums[i]; if(m.count(t)) return {i, m[t]}; m[nums[i]] = i; } return {}; } };
上述的雜湊表的方式,只要不存在大量的雜湊衝突(一般也不會存在,除非題目故意卡你),查詢和插入的時間複雜度近似為常數級,所以時間複雜度為O(N)