原创 對象的複製:淺複製(clone()方法的使用)+深複製

首先需要了解對象深、淺複製的概念: 淺複製:將一個對象複製後,基本數據類型(如int,String,boolean)的變量都會重新創建,而引用類型,指向的還是原對象(或數組)所指向的。 ① 拷貝時候雖然創建了新的對象,但是並沒

原创 Callable、Future、Runnable、FutureTask的聯繫與區別

① Runnable 它是一個接口,在它裏面只聲明瞭一個run()方法: public interface Runnable { public abstract void run(); } 由

原创 Java創建並執行線程的四種方法

java裏面創建線程有四種方式: 無返回: 1. 實現Runnable接口,重寫run(); 2. 繼承Thread類,重寫run(); 有返回: 1. 實現Callable接口,重寫call(),利用FutureTas

原创 java中join()方法的使用

Java中Thread類提供join()方法。 作用:用於在當前線程A中添加別的線程B,這時線程A被阻塞,處於Blocked狀態,線程B開始執行,當線程B執行完以後,線程A處於可運行狀(Runnable),等待cpu的調度再執行。

原创 排序算法Java實現

package algorithm; /* * 所有排序均按照從小到大的順序 */ public class Sort { public static void main(String[] args) {

原创 Java中Arrays.sort()實現

對基本類型用的快速排序,對對象類型是歸併排序。 原因可能和穩定性有關。 一般來說,快速排序效率最高,不過快速排序是不穩定的,就是比如說數組中的值相同的兩個整數,排序前和排序的先後順序可能不一致,這對基本類型來說是完全可以接受的

原创 合併兩個排序後的鏈表

算法描述: 輸入兩個單調遞增的鏈表,輸出兩個鏈表合成後的鏈表,當然我們需要合成後的鏈表滿足單調不減規則。 思路: 1. 兩條鏈表list1+list21分別單調遞增; 2. 選擇較小的鏈表頭作爲合併後的頭結點; 3. 再兩

原创 二叉樹的鏡像

題目描述 操作給定的二叉樹,將其變換爲源二叉樹的鏡像。 二叉樹的鏡像定義:源二叉樹 8 / \ 6 10 / \ / \

原创 判斷某年月日是當年的第幾天

題目描述: 輸入三個整數year,month,day分別表示當前年月日,輸出該天是當年的第幾天 思路: * 由於只有十二個月,所以可以枚舉每個月的天數 * 需要單獨考慮的是當前年份是否是閏年&&當前月份是否大月2

原创 把數組排列成最小的數

題目描述 輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。例如輸入數組{3,32,321},則打印出這三個數字能排成的最小數字爲321323。 思路一: 排列出數組所有可能的組合,找出其中最

原创 求出不超過n的幸運數

題目描述: 對於某一個數m,如果它只包含數字4或者7(如44,47,77),我們稱之爲幸運數。現在輸入一個自然數x,求出不超過x的幸運數的個數。 注意:結果可能非常大,請將答案除10^9+7取餘數。 思路一: 1. 引入隊列queue,

原创 複雜鏈表的複製

題目描述 輸入一個複雜鏈表(每個節點中有節點值,以及兩個指針,一個指向下一個節點,另一個特殊指針指向任意一個節點),返回結果爲複製後複雜鏈表的頭結點。 思路: 1. 首先根據鏈表的next遍歷一遍,在每個node節點的後面複製一個與

原创 求一個環內連續m個數的最大和

題目描述: 有n個小朋友,圍成一個圈,玩丟手絹的遊戲。現輸入一個數組表示每個小朋友被丟中的次數,同時輸入一個整數m(1<=m<=n),求出連續m個小朋友被丟中次數的和的最大值。 示例: input: 5//數組大小n 1 2 3 4 5

原创 一個字符串包含的所有迴文串

題目描述: 輸入一個字符串str,輸出str包含的所有迴文串的個數。如ABA,包含的迴文串有A,B,A,AA,ABA共5個。 思路: 長度爲N的str的不打亂原始順序所有可能的字符子串個數爲2^N個,再判定每一個子串是否是迴文串。 感

原创 和爲S的連續正數序列

題目描述: 現在要求有多少種連續的正數序列的和爲100(至少包括兩個數)。其中一組連續正數和爲100的序列:18,19,20,21,22。現在把問題交給你,你能不能也很快的找出所有和爲S的連續正數序列? 思路: 由於題目要求至少包含兩個