LeetCode演算法詳解(一)--Two Sum
阿新 • • 發佈:2019-02-08
這個題目的目的就是給定陣列以及目標和,找出陣列中和為給定目標的兩個數並且輸出,要求是每個數只能使用一次,且輸出的為兩個數在陣列中的位置。
比較容易想到的方法是遍歷陣列中的所有數字,此種方法時間複雜度比較高O(n^2),程式碼如下:
class solution{ public: int[] twosum(int[] nums,int target){ int len = nums.length; int index1 = 0,index2 =0; if (len<=1) return NULL; for(int i=0;i<len;i++) for(int j=i+1;j<len;j++) if (nums[i]+nums[j]==target) { index1 = i+1; index2 = j+1; break; } return new int[] {index1,index2}; };
比較簡便的方法是構造hash表,從而減少查詢時間,提升效能。程式碼如下:
class solution { vector<int> twosum(vector<int>&nums,int target) { vector<int>result; map<int,int>hmap; for(int i=0;i<nums.size();i++) { if(!hamp.count(nums[i]) { hamp.insert(pair<int,int>(nums[i],i)); } if(hamp.count(target-nums[i])) {int n = hmap.count(target-nums[i]); if(n<i) { result.push_back(n); result.push_back(i); return result; } } } }
python程式碼:
class solution(object): def twosum(self,nums,target): dict = {} for i in range(len(nums)): if dict.get(target-nums[i],None)==None: dict[nums[i]]=i else: return(dict[target-nums[i]],i)