question 1 列表查重
給定一個(gè)列表,假如里面有任何重復(fù)元素返回true,否則返回false
答案:
利用set函數(shù)能很簡(jiǎn)單的解決這類重復(fù)的問題径荔。
下面我用了字典來統(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:查詢二叉樹里面的兩個(gè)元素和是不是?k
給定一個(gè)查詢樹憋活,和值k猪落,問樹里面的兩個(gè)元素能不能組成k(和為k)
我的答案:
最開始我想到的是利用二叉搜索樹的結(jié)構(gòu)特點(diǎn),用搜索樹來搜索? y=k-cur.val,可以看到這個(gè)想法還是比較耗時(shí)間的瓢捉,因?yàn)閷?duì)于每一個(gè)節(jié)點(diǎn)频丘,都要調(diào)用一下搜索
別人的方法:
只遍歷一次樹,但是將值保存下來泡态,這樣每一遇到要查詢的時(shí)候就調(diào)用hash查詢搂漠,這樣能夠保證只用O(n)的時(shí)間就完成任務(wù)。
這里面要明白:假設(shè) 樹有兩個(gè)元素 a+b=k某弦,遍歷的時(shí)候先遇到了a,這時(shí)候在hash表中查詢b=k-a桐汤,沒有查詢到,保存a到hash表,繼續(xù)遍歷靶壮,遇到b惊科,查詢hash表a=k-b,成功亮钦。所以這種方法只要樹里面存在滿足要求的元素馆截,一定能查詢的到
question 3 建立二叉樹
給定一組列表,要求建立二叉樹蜂莉,根節(jié)點(diǎn)為列表中最大的元素蜡娶,左子樹由列表左邊建立(以最大元素為界),右子樹由列表右邊建立
我的方法:
這個(gè)題目很適合用遞歸的方法做:
1.找到列表的最大數(shù)映穗,將列表分成兩部分
2.用最大數(shù)建立根節(jié)點(diǎn)窖张,遞歸用子列表建立子節(jié)點(diǎn)