leetcode 454 四数相加

很明确的问题,如果一个个遍历,那复杂度是n^4,是无法接受的。那么改进的方式就是对其中一部分使用哈希表,那么该对其中多少用呢,最好的分割方式是对半开,因为如果不是对半开,时间复杂度将由维数较大的那个部分决定,是必定大于对半开的时间复杂度的。该题中就是22对半开,贴代码

 1 class Solution {
 2 public:
 3     int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) 
 4     {
 5         int n = nums1.size();
 6         unordered_map<int,int> numHash;
 7         for(int i = 0 ; i < n ; i++)
 8         {
 9             for(int j = 0 ; j < n ; j++)
10             {
11                 numHash[nums3[i]+nums4[j]]++;
12             }
13         }
14         int resSum = 0;
15         for(int i = 0 ; i < n ; i++)
16         {
17             for(int j = 0 ; j < n ; j++)
18             {
19                     resSum+=numHash[-1*(nums1[i]+nums2[j])];                    
20             }
21         }
22         return resSum;
23     }
24 };

 

posted @ 2021-11-05 14:16  zhaohhhh  阅读(48)  评论(0)    收藏  举报