四数相加II
「本題是使用哈希法的經典題目,而第18題. 四數之和,第15題.三數之和 并不合適使用哈希法」,因為三數之和和四數之和這兩道題目使用哈希法在不超時的情況下做到對結果去重是很困難的,很有多細節需要處理。
「而這道題目是四個獨立的數組,只要找到A[i] + B[j] + C[k] + D[l] = 0就可以,不用考慮有重復的四個元素相加等于0的情況,所以相對于題目18. 四數之和,題目15.三數之和,還是簡單了不少!」
如果本題想難度升級:就是給出一個數組(而不是四個數組),在這里找出四個元素相加等于0,答案中不可以包含重復的四元組,大家可以思考一下,后續的文章我也會講到的。
本題解題步驟:
1、首先定義 一個unordered_map,key放a和b兩數之和,value 放a和b兩數之和出現的次數。
2、遍歷大A和大B數組,統計兩個數組元素之和,和出現的次數,放到map中。
3、定義int變量count,用來統計a+b+c+d = 0 出現的次數。
4、在遍歷大C和大D數組,找到如果 0-(c+d) 在map中出現過的話,就用count把map中key對應的value也就是出現次數統計出來。
5、最后返回統計值 count 就可以了
總結