LeetCode每日十題 陣列(四)

2021-10-09 12:23:05 字數 2259 閱讀 3511

}這次**只通過了一半多的用例,不是因為有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,...