question 1 列表查重
給定一個(gè)列表,假如里面有任何重復(fù)元素返回true,否則返回false

答案:
利用set函數(shù)能很簡(jiǎn)單的解決這類(lèi)重復(fù)的問(wèn)題。
下面我用了字典來(lái)統(tǒng)計(jì),但是發(fā)現(xiàn)用get函數(shù)會(huì)慢很多


用了dict的內(nèi)置函數(shù)確實(shí)會(huì)增加一些時(shí)間損耗,所以自己權(quán)衡(但是用get方法建立元素統(tǒng)計(jì)的話代碼很簡(jiǎn)便)
question 2:查詢二叉樹(shù)里面的兩個(gè)元素和是不是?k
給定一個(gè)查詢樹(shù),和值k,問(wèn)樹(shù)里面的兩個(gè)元素能不能組成k(和為k)

我的答案:
最開(kāi)始我想到的是利用二叉搜索樹(shù)的結(jié)構(gòu)特點(diǎn),用搜索樹(shù)來(lái)搜索? y=k-cur.val,可以看到這個(gè)想法還是比較耗時(shí)間的,因?yàn)閷?duì)于每一個(gè)節(jié)點(diǎn),都要調(diào)用一下搜索
別人的方法:
只遍歷一次樹(shù),但是將值保存下來(lái),這樣每一遇到要查詢的時(shí)候就調(diào)用hash查詢,這樣能夠保證只用O(n)的時(shí)間就完成任務(wù)。
這里面要明白:假設(shè) 樹(shù)有兩個(gè)元素 a+b=k,遍歷的時(shí)候先遇到了a,這時(shí)候在hash表中查詢b=k-a,沒(méi)有查詢到,保存a到hash表,繼續(xù)遍歷,遇到b,查詢hash表a=k-b,成功。所以這種方法只要樹(shù)里面存在滿足要求的元素,一定能查詢的到

question 3 建立二叉樹(shù)
給定一組列表,要求建立二叉樹(shù),根節(jié)點(diǎn)為列表中最大的元素,左子樹(shù)由列表左邊建立(以最大元素為界),右子樹(shù)由列表右邊建立

我的方法:
這個(gè)題目很適合用遞歸的方法做:
1.找到列表的最大數(shù),將列表分成兩部分
2.用最大數(shù)建立根節(jié)點(diǎn),遞歸用子列表建立子節(jié)點(diǎn)
