LintCode/LeetCode訓(xùn)練題目&答案詳解—基礎(chǔ)篇

一、在二叉樹中尋找值最大的節(jié)點(diǎn)并返回:
給出如下一棵二叉樹:

     1
   /   \
 -5     2
 / \   /  \
0   3 -4  -5 

返回值為 3 的節(jié)點(diǎn)。

public class Solution {
    /**
 * @param root the root of binary tree
 * @return the max node
 */
public TreeNode maxNode(TreeNode root) {
    if (root == null) {
        return null;
    }
    return getMaxTreeNode(root);
}

private TreeNode getMaxTreeNode(TreeNode root) {
    if (root == null) {
        return new TreeNode(Integer.MIN_VALUE);
    }
    TreeNode left = getMaxTreeNode(root.left);
    TreeNode right = getMaxTreeNode(root.right);
    if (root.val > left.val && root.val > right.val) {
        return root;
    } else if (right.val > left.val && right.val > root.val) {
        return right;
    }
    return left;
}
 }

簡析:使用了遞歸的思想哩簿;注意為空的判斷宵蕉;

二、單例

單例 是最為最常見的設(shè)計模式之一节榜。對于任何時刻羡玛,如果某個類只存在且最多存在一個具體的實(shí)例,那么我們稱這種設(shè)計模式為單例宗苍。例如稼稿,對于 class Mouse (不是動物的mouse哦),我們應(yīng)將其設(shè)計為 singleton 模式讳窟。

你的任務(wù)是設(shè)計一個 getInstance 方法让歼,對于給定的類,每次調(diào)用 getInstance 時丽啡,都可得到同一個實(shí)例是越。

樣例:
在 Java 中:

A a = A.getInstance();
A b = A.getInstance();
a 應(yīng)等于 b.

挑戰(zhàn):
如果并發(fā)的調(diào)用 getInstance,你的程序也可以正確的執(zhí)行么碌上?

class Solution {
private volatile static  Solution mInstance = null;
/**
* @return: The same instance of this class every time
*/
public static Solution getInstance() {
    if (mInstance == null) {
        synchronized(Solution.class) {
            if (mInstance == null) {
                mInstance = new Solution();    
            }
        }
    }
    return mInstance;
}

private Solution() {}

}

注意:實(shí)現(xiàn)一個單例有兩點(diǎn)注意事項(xiàng)倚评,①將構(gòu)造器私有,不允許外界通過構(gòu)造器創(chuàng)建對象馏予;②通過公開的靜態(tài)方法向外界返回類的唯一實(shí)例

參考:單例模式的幾種寫法對比:
http://wuchong.me/blog/2014/08/28/how-to-correctly-write-singleton-pattern/

三天梧、整數(shù)排序

給一組整數(shù),按照升序排序霞丧,使用選擇排序呢岗,冒泡排序,插入排序或者任何 O(n2) 的排序算法蛹尝。

樣例:
對于數(shù)組 [3, 2, 1, 4, 5], 排序后為:[1, 2, 3, 4, 5]后豫。

答案(java版本):

選擇排序:

public void sortIntegers(int[] A) {
    int i, j, min, temp, len = A.length;
    for (i = 0; i < len -1; i++) {
        min = i; //未排序序列中最小數(shù)據(jù)數(shù)組下標(biāo)
        for (j = i + 1; j < len; j++) { //在未排序元素中繼續(xù)尋找最小元素,并保存其下標(biāo)
            if (A[min] > A[j]) {
                min = j;
            }
        }
        if (i != min) { //將最小元素放到已排序序列的末尾
            temp = A[min];
            A[min] = A[i];
            A[i] = temp;
        }
    }    
}

冒泡排序:

public void sortIntegers(int[] A) {
    int i, j, temp, len = A.length;
    for (i = 0; i < len - 1; i++) {
        for (j = 0; j < len - i - 1; j ++)
        if (A[j] > A[j+1]) {
            temp = A[j+1];
            A[j+1] = A[j];
            A[j] = temp;
        }
    }
    
}

答案解析:
各個語言的實(shí)現(xiàn)請參考維基百科:https://zh.wikipedia.org/wiki/%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F

** 四突那、斐波那契數(shù)列**

查找斐波納契數(shù)列中第 N 個數(shù)挫酿。所謂的斐波納契數(shù)列是指:
前2個數(shù)是 0 和 1 。
第 i 個數(shù)是第 i-1 個數(shù)和第i-2 個數(shù)的和愕难。
斐波納契數(shù)列的前10個數(shù)字是:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ...

答案:

public int fibonacci(int n) {
    // write your code here
    int a1 = 0;
    int a2 = 1;
    int result = 0;
    if (n == 1) {
        return a1;
    }
    if (n == 2) {
        return a2;
    }
    for (int i = 3; i <= n; i++) {
        result = a1 + a2;
        a1 = a2; 
        a2 = result;
    }
    return result;
}

注意事項(xiàng):
1早龟、n是從1開始的,而不是0
2猫缭、一般我們都會想到用遞歸的方式實(shí)現(xiàn)葱弟,但是這個時間開銷很大:

int fibonacci(int n) { 
  if (n == 1)
      return 0;
  else if (n == 2)
      return 1;
  return fib(n-1) + fib(n-2);
}

3、題目的引申: 青蛙跳階梯猜丹,鋪方磚
參考:http://www.bubuko.com/infodetail-1099705.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末芝加,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子射窒,更是在濱河造成了極大的恐慌藏杖,老刑警劉巖将塑,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異制市,居然都是意外死亡抬旺,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門祥楣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來开财,“玉大人,你說我怎么就攤上這事误褪≡瘅ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵兽间,是天一觀的道長历葛。 經(jīng)常有香客問我,道長嘀略,這世上最難降的妖魔是什么恤溶? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮帜羊,結(jié)果婚禮上咒程,老公的妹妹穿的比我還像新娘。我一直安慰自己讼育,他們只是感情好帐姻,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著奶段,像睡著了一般饥瓷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上痹籍,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天呢铆,我揣著相機(jī)與錄音,去河邊找鬼词裤。 笑死刺洒,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吼砂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鼎文,長吁一口氣:“原來是場噩夢啊……” “哼渔肩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拇惋,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤周偎,失蹤者是張志新(化名)和其女友劉穎抹剩,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蓉坎,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡澳眷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蛉艾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钳踊。...
    茶點(diǎn)故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖勿侯,靈堂內(nèi)的尸體忽然破棺而出拓瞪,到底是詐尸還是另有隱情,我是刑警寧澤助琐,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布祭埂,位于F島的核電站,受9級特大地震影響兵钮,放射性物質(zhì)發(fā)生泄漏蛆橡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一掘譬、第九天 我趴在偏房一處隱蔽的房頂上張望泰演。 院中可真熱鬧,春花似錦屁药、人聲如沸粥血。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽复亏。三九已至,卻和暖如春缭嫡,著一層夾襖步出監(jiān)牢的瞬間缔御,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工妇蛀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留耕突,地道東北人。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓评架,卻偏偏與公主長得像眷茁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子纵诞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容