-
從簡單的例子來分析CompareTo()與Comparable()的源碼有何不同?
最近急著找工作,也沒什麼寫文章,想著技術沉澱一下,再來頭條號裝逼。不巧的是,今天複習TreeSet的時候呢,瞭解到TreeSet的底層會調用compareTo(T o)的方法來比較元素之間的大小,且分為自然排序和定制排序。於是簡單的研究了
2017-09-02 0 -
常見Java問題(五十六)——TreeSet定制排序
關於TreeSet呢。上一篇有所涉及,但是我想了下,還是需要補充一點內容,其實是重複的,要是基礎好的人,可以不用看。運行結果如下:
2017-09-02 1 -
常見Java問題(五十五)——ArrayList如何序列化
我們知道在ArrayList內部是用陣列實現的。如下所示:private transient E[] elementData; 可是問題來了,這樣的話,如何實現序列化呢?因為我們知道用transient修飾的變數是不會序列化的,但是我們會
2017-08-30 0 -
線上OJ遇到的坑,希望可以即將給參加線上機試的同學一點幫助
老師想知道從某某同學當中,分數最高的是多少,現在請你程式設計模擬老師的詢問。當然,老師有時候需要更新某位元同學的成績. 輸入描述:輸入包括多組測試資料。輸出描述:對於每一次詢問操作,在一行裡面輸出最高成績.輸入例子1:5 7輸出例子1:5
2017-08-14 0 -
常見Java問題及筆試題(五十二)—字串所有組合,兩種思路
問題:假設字串中所有字元都不重複,如何輸出字串的所有組合?例如,輸入字串“abc”,則輸出a,b,c,ab,ac,bc,abc,共七種組合。第一種思路:用遞迴的方式,遍歷字串,每個字元只能取或不取。若取該字元,就把它放到字串中,遍歷完畢後
2017-08-04 0 -
常見Java問題及筆試題(四十二)——如何求最大子陣列之和(三種方法求解)
描述:假設現在有一個n個元素的陣列,這n個元素可以是正數也可以是負數,陣列中連續的一個或多個元素可以組成一個連續的子陣列,一個陣列中有多個這種連續的子陣列,求子陣列和的最大值。-------------------------------
2017-07-29 0 -
常見Java問題及筆試題(三十五)——歸併排序代碼的實現(有點繁瑣,需耐心看代碼)
本文是排序的最後一篇了,我們知道排序有很多,基本上掌握幾個常用的就夠了,除非你在公司做演算法研究。關於面試中可能會問到排序演算法的時間複雜度和空間複雜度以及穩定性。個人覺得只要心中有代碼的樣子,到時候想一想應該就知道了。要是也死記硬背下來
2017-07-27 0 -
常見Java問題及筆試題(三十四)——堆排序代碼的實現(含簡單數學證明)
在看代碼之前,我們首先看一個數學證明,由於堆排序針對的都是完全二叉樹,所以本文的證明都是針對完全二叉樹的證明。其實也很簡單。只是網上都沒有相關證明,都是一筆帶過,所以我就寫一下,基本上算是初中證明題:我們知道在一棵非葉子節點,它的節點編號
2017-07-27 1 -
常見Java問題及筆試題(三十九)——如何判斷一個陣列是否是2的N次方(簡單有趣)
其實是一個很巧的題目,題目本身不難,但是我們想到的方法一般如下:但是,其實我們還可以正向來看這個數,也就是說每個數是2的N次方的話,就是說從1開始,每次乘以2,直到和數本身相等,那麼就可以證明其是2的N次方。我們可以用1做移位操作。都是基
2017-07-29 1 -
常見Java問題及筆試題(四十一)——不用排序的辦法情況下,一次找到陣列中第二大的數
思路很簡單:設置兩個變數,最開始最大值max指向第一個元素,第二大的元素secondMax為-1.當後面的元素大於max時,則將大max的值賦給secondMax。max後面的元素付給max。如果後面的元素比max小,此時還要比較其與se
2017-07-29 1 -
常見Java問題及筆試題(四十)—如何判斷一個二進位數字有多少個1(兩種思路)
有些話說不清楚,直接看圖吧。還有一種思路是這樣的:首先判斷這個數的最後一位是否為1,如果為1,則計數器加1,然後,通過右移丟棄掉最後一位。迴圈執行該操作直到這個數等於0為止。在判斷二進位數字最後一位是否為1時,可以採用與運算來做。其實bb
2017-07-29 1 -
常見Java問題及筆試題(三十八)——求出二叉樹結點的最大距離
問題描述:結點的距離指的是兩個結點之間的邊的個數。一般而言,對二叉樹的操作通過遞迴方法實現比較容易。求最大距離的主要思路如下:首先,求左子樹距離根節點的最大距離,記為leftMaxDistance;其次,求右子樹距根節點的最大距離,記為r
2017-07-28 0 -
常見Java問題及筆試題(三十七)——實現層次遍歷二叉排序樹的代碼(兩種方法)(二)
先簡單囉嗦一句概念:按照高度,一層一層將二叉樹的結點遍歷一遍,上一篇文章寫到,二叉樹的前序遍歷,中序遍歷以及後序遍歷。層次遍歷也是一樣,利用遞迴和佇列兩種方法,很快即可遍歷。部分未貼出的資料結構請看上一篇文章!!!!先看用佇列做的方法:再
2017-07-28 1 -
常見Java問題及筆試題(三十六)——理解+實現二叉排序樹的代碼(一)
先囉嗦一句:二叉排序樹又叫二叉查找樹或者叫二叉查詢樹,不管它了,僅是翻譯的不一樣。如果對資料結構的操作不是很理解,建議從鏈表開始看,本人前面已經對鏈表發表了好幾篇文章!!!先看定義:二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹:(
2017-07-28 0 -
常見Java問題及筆試題(三十三)——快速排序代碼的實現(有點小麻煩)
快速排序的一些什麼原理我就不說了,大家都很忙,直接上代碼,部分解釋在代碼中:測試結果如下:本人私下測了好幾組資料,這裡只貼一組,如果有問題,歡迎指正!!!都是簡單題,大牛請走開!!!
2017-07-27 0 -
常見Java問題及筆試題(三十二)——冒泡排序代碼的實現(三)
題外話:在深入學習更多排序演算法後和在實際使用情況中,冒泡排序的使用還是極少的。它適合資料規模很小的時候,而且它的效率也比較低,但是作為入門的排序演算法,還是值得學習的.每次顯然:冒泡排序總的平均時間複雜度為O(n*2)。但是最好的時間複
2017-07-26 0 -
常見Java問題及筆試題(三十)——選擇排序代碼的實現(一)
選擇排序是一種非常直觀的排序方式,基本原理如下:對於一個給定的一組記錄,經過第一輪比較後得到最小的記錄,然後將該記錄與第一個記錄的位置進行交換;接著對第二個記錄進行同樣的操作,這樣依次往下進行,直到進行比較的記錄只有一個位置。顯而易見,這
2017-07-26 0 -
常見Java問題及筆試題(三十一)——插入排序代碼的實現(二)
插入排序的基本思想是:每步將一個待排序的紀錄,按其值的大小插入前面已經排序的檔中適當位置上,直到全部插入完為止。下面我們來看看插入排序的時間複雜度和空間複雜度。其實這兩個東西呢,說起來複雜,但是實際上如果你看代碼的話,細細分析其實是不難的
2017-07-26 0 -
常見Java問題及筆試題(二十七)——如何找到兩個鏈表相交的第一個結點
首先分別計算兩個鏈表的sl1和sl2的長度:length1和length2.假設現在是length1大,那麼首先對sl1前進(length1-length2)步,再同時遍歷兩個鏈表。這麼做的原因,相交的結點後面的結點都是一樣的。所以可以這
2017-07-25 0 -
常見Java問題及筆試題(二十六)——判斷兩個單鏈表是否相交
如果兩個鏈表相交,那麼它們一定具有相同的尾結點,因此:分別遍歷兩個鏈表,記錄他們的尾結點,如果尾結點相同,那麼兩個鏈表相交。 結點資料結構主要方法體主方法測試用例輸出結果如下:都是基礎題,大神請自動略過!!
2017-07-25 0