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