20.11.27 leetcode454
阿新 • • 發佈:2020-11-27
題目連結:https://leetcode-cn.com/problems/4sum-ii/
題意:給你四個長度相同(最大為500)的無序陣列,求問從每個陣列中取出一個數,相加為和的方法一共有多少。
分析:我本來想的是CD陣列的所有情況直接構成一個新陣列e再排序,然後AB陣列遍歷得到的結果在e中二分查詢,時間複雜度為O(N^2log(N^2)),等價於n為25000時的nlogn複雜度,感覺能過的,但還是TLE了,看題解的方法就是直接用map存,時間複雜度只有n^2,確實要先進不少。
class Solution { public: int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) { int ans=0; unordered_map<int,int> m; int n=A.size(); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ ++m[A[i]+B[j]]; } } for(int i=0;i<n;i++){for(int j=0;j<n;j++){ if(m.count(-C[i]-D[j])){ ans+=m[-C[i]-D[j]]; } } } return ans; } };