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 };

浙公网安备 33010602011771号