}這次**只通過了一半多的用例,不是因為有bug,而是思路錯了,這裡是不能用二分法的,因為整個序列不滿足單調性。雖然在初始排序的時候控制了負數和正數的區別,但在while迴圈裡還是用了二分法。當然可以不用二分法,既然都寫到這了,直接比較就行,可是這樣複雜度就高了,也意味著這種方法行不通。看了解答,用的是我不太熟悉的treemap,以前認為用的不多,沒認真學,現在稍微整理一下。
class
solution
int m, n;
mapmap =
newtreemap
<
>()
;//把陣列a每個元素的個數進行排序
for(
int key : a)
for(
int key : map.
keyset()
) m = map.
get(key);if
(key <0)
else
n = map.
getordefault
(key,0)
;if(m > n)
map.
put(key, n - m);}
return
true;}
}
treemap或許不如hashmap那麼常用,但它也有自己的應用場景,treemap可以實現元素的自動排序。treemap儲存k-v鍵值對,通過紅黑樹(r-b tree)實現,也因為treemap是通過紅黑樹實現,紅黑樹結構天然支援排序,預設情況下通過key值的自然順序進行排序或者根據建立對映時提供的comparator進行排序,具體取決於使用的構造方法。treemap的基本操作containskey、get、put和remove的時間複雜度是log(n)。
遍歷treemap的鍵值對
第一步:根據entryset()獲取treemap的「鍵值對」的set集合
第二步:通過iterator迭代器遍歷「第一步」得到的集合
integer integ=null;
iterator iter=map.
entryset()
.iterator()
;while
(iter.
hasnext()
)
遍歷treemap的鍵第一步:根據keyset()獲取treemap的「鍵」的set集合
第二步:通過iterator迭代器遍歷「第一步」得到的集合
string key=null;
integer integ=null;
iterator iter=map.
keyset()
.iterator()
;while
(iter.
hasnext()
)
遍歷treemap的值第一步:根據value()獲取treemap的「值」 的集合
第二步:通過iterator迭代器遍歷「第一步」得到的集合
integer value=null;
collection c=map.
values()
;iterator iter=c.
iterator()
;while
(iter.
hasnext()
)
每日打卡十六天,以下圖為證
leetCode每日十題 棧(難度 困難)
因為寫的十棧裡面的題目,所以剛開始在想用棧來寫的時候,是真的一點思路沒有。琢磨著各種可以取到高分的情況,發現那是一環扣著一環,每次決定都受之後分數序列的影響,既然如此,便想到用遞迴來寫 呸,看題解的 說實話,遞迴這東西是真的巧妙啊,你不用去討論如何才能取最大,你只需要告訴計算機,我就是要去最大,然後...
leetCode每日十題 堆(難度 中等)
這是我最初的想法,時間超時了,當然很容易想到另一種方法。後面的數是前面某乙個數的2,3,5倍。因為之前沒用過堆,這裡就當堆入門了,直接學習題解的方法。演算法 預計算1690個醜數 初始化預計算用到的陣列nums,堆heap和雜湊表seen跟蹤在堆 現過的元素,避免重複。迴圈計算醜數 彈出堆中最小的數...
python3每日十題(四)
1 輸入乙個正整數,輸出該正整數的階乘的值 思路 用遞迴實現,也可以用reduce或者遍歷 def prime n if n 1 return 1 else return n prime n 1 input num int input 輸入乙個正整數 print d的階乘為 d input num,...