1. 程式人生 > 實用技巧 >20.11.27 leetcode454

20.11.27 leetcode454

題目連結: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; } };