成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

最多連續(xù)數(shù)的子集及單鏈表和之戀分析及解答

開發(fā) 前端
給一個整數(shù)數(shù)組,找到其中包含最多連續(xù)數(shù)的子集,比如給:15, 7, 12, 6, 14, 13, 9, 11,則返回: 5:[11, 12, 13, 14, 15] 。最簡單的方法是sort然后scan一遍,但是要 o(nlgn) , 有什么 O(n) 的方法嗎?

給一個整數(shù)數(shù)組, 找到其中包含最多連續(xù)數(shù)的子集,比如給:15, 7, 12, 6, 14, 13, 9, 11,則返回: 5:[11, 12, 13, 14, 15] 。

最簡單的方法是sort然后scan一遍,但是要 o(nlgn) , 有什么 O(n) 的方法嗎?

單鏈表和之戀分析:

原題:兩個單鏈表(singly linked list),每一個節(jié)點里面一個0-9的數(shù)字,輸入就相當于兩個大數(shù)了。然后返回這兩個數(shù)的和(一個新list)。這兩個輸入的list長度相等。 要求是:

  1. 不用遞歸;
  2. 要求算法在最好的情況下,只遍歷兩個list一次 ,最差的情況下兩遍。

分析:遇到一個面試題,#首先,要澄清和理解題意,確保你的理解和面試官的本意一致。#題中的單鏈表,可不可以原地修改?是從高位到低位,還是 低位到高位?如果是從低位到高位,那么問題很簡單,是不是?只要兩個指針移動(因為是等長的),對應位置相加,同時記錄是否有進位,產(chǎn)生的結果存入新的鏈 表中。

如果是從高到低,問題就復雜了,進位是萬惡之源。這時,也許我們會想到reverse兩個單鏈表(其實,這也是一道很好的面試題,如何做?考慮遞歸和遞推兩種算法),但這樣做,是不是最好最壞情形都得遍歷兩次?好像不合題意。

如果新的鏈表的節(jié)點可以存一個或兩個數(shù)字,那么,第一遍,將相應節(jié)點的數(shù)字相加,存入新的鏈表,并用一個flag標志整個操作中是否有進位。如果沒 有,結了;否則,再掃描一遍新的鏈表,將有兩個數(shù)字的進位存到上一個節(jié)點。如果新的鏈表是雙的,問題比較簡單;如果新的鏈表還是單的,這一步也會很復雜, 比如,10-〉9-〉9-〉12,如何轉成1-〉1-〉0-〉0-〉2,本身也是一個很好的面試題。這時可能需要reverse鏈表再操作。

如果新的鏈表的節(jié)點只能存一個數(shù)字,那么能有什么辦法?

也許你有更好的解決辦法?期待。

面試題單鏈表和之戀精美解答

本期推薦Hawstein (新浪微博@Hawstein)對于面試題求兩個單鏈表的和的精美分析和解答。如果你對我們的面試題有不同的更優(yōu)的解答,請回復我們。對于耳目一新的深思熟慮的分析和解答,我們將在此推薦。

今天的 Bonus 面試題:一個單鏈表head,和一個指向表中某個節(jié)點的指針p,怎么以最快的速度刪除指針p所指的節(jié)點?

題目

兩個單鏈表(singly linked list),每一個節(jié)點里面一個0-9的數(shù)字, 輸入就相當于兩個大數(shù)了。然后返回這兩個數(shù)的和(一個新list)。這兩個輸入的list 長度相等。 要求是:

  1. 不用遞歸。
  2. 要求算法在最好的情況下,只遍歷兩個list一次, 最差的情況下兩遍。

解答

這是陳利人同學今天發(fā)在待字閨中的面試編程題目,看了一下解答, 發(fā)現(xiàn)要么需要遍歷鏈表兩次,要么需要額外的存儲空間,難道就沒有更優(yōu)的解法了嗎? 想了一下,發(fā)現(xiàn)還是有的。

OK,我們把這個問題具體化一下吧:(這里就不再考慮從低到高存等blabla情況)

兩個單鏈表,每個節(jié)點存儲一個0-9的數(shù)字,那么一個單鏈表就表示一個大數(shù)。 從高位到低位存,即表頭對應的是這個大數(shù)的最高位。兩個鏈表的長度相等, 我們要返回一個新的單鏈表,是這兩個輸入鏈表代表的數(shù)的和。我們不能使用遞歸, 不能使用額外的存儲空間,即空間復雜度是O(1)。只遍歷輸入鏈表一次, 輸出鏈表也是單鏈表(沒有前向指針)。

既然只能遍歷兩個輸入鏈表一次,那我們就從高位加起唄。在這種限制條件下, 這是唯一的出路。然后呢?進位咋整?先加高位,再加低位, 低位產(chǎn)生的進位怎么加到高位去?我們可沒有前向指針哦親。既然沒有前向指針, 我們就讓一個臨時指針指向高位,當?shù)臀幌嗉赢a(chǎn)生進位時,我們就可以操作高位了。 讓我們看看圖示:

  1. 輸入鏈表1: 1 2 3   
  2. 輸入鏈表2: 1 2 8   
  3. 輸出鏈表:  2 4   
  4. 兩個指針:    p q   

當指向輸出鏈表當前結點的指針q發(fā)現(xiàn)3+8=11,產(chǎn)生進位,指向高位的p就將結點值加1。 注意,兩個0-9的數(shù)相加,要么不進位,要么進位為1,只有兩種情況。因此, 我們不用考慮進位是其它數(shù),這一點很重要,后面會看到的。

這樣就OK了嗎?當然不是,如果你遇上連續(xù)進位,怎么破?請看下面的情況:

  1. 輸入鏈表1: 1 2 3 4 5   
  2. 輸入鏈表2: 1 7 6 5 9 

顯然,指向高位的指針p總是緊跟著指向當前結點的指針q是不行的, 這樣當遇上連續(xù)進位時,比p更高位的位也需要改變。既然p不能緊跟著q, 我們就不讓它們緊挨著,給它們產(chǎn)生點距離??紤]一下,什么情況下會產(chǎn)生連續(xù)進位? 9! 嗯,遇上9的時候。它要連續(xù)進位到哪一位?不為9的那一位。因此,指針p 要停留在和不為9的那一位上,看圖示:

  1. 輸入鏈表1: 1 2 3 4 5   
  2. 輸入鏈表2: 1 7 6 5 9   
  3. 輸出鏈表:  2 9 9 9   
  4. 兩個指針:  p       q   

這回當q發(fā)現(xiàn),需要進位了,只需要把p所指結點加1,然后把p,q間的結點都置0即可。 為什么都置0了呢,因為進位只可能是1,9+1=10,留在該位的自然是0了。

分析完畢,這種方法在任何時候都只需要遍歷輸入鏈表一次,空間復雜度O(1)。

原文鏈接:http://www.ituring.com.cn/article/47706

責任編輯:陳四芳 來源: 圖靈社區(qū)
相關推薦

2013-10-15 16:20:59

試題鏈表

2013-10-16 16:38:39

鏈表矩陣

2013-10-16 15:45:24

Google面試題

2013-10-16 16:15:26

單鏈表

2019-11-01 15:33:00

JavaScript面試開發(fā)

2010-04-28 11:09:47

Oracle常見問題

2010-04-27 18:24:56

Oracle常見問題

2012-04-16 09:29:42

2009-06-26 13:19:00

ADSL撥號故障

2009-11-09 10:42:53

ibmdwRational

2011-05-19 16:30:38

軟件測試

2009-07-29 10:03:24

思科網(wǎng)絡管理Cisco

2009-04-13 11:42:29

IBMdWRational

2009-06-14 22:28:14

ibmdwWebSphere

2012-12-06 10:24:21

Saliency MaMATLAB

2011-03-30 14:44:28

MRTG

2019-10-21 13:12:41

數(shù)據(jù)分析增強分析人工智能

2011-05-16 10:04:38

2014-05-04 10:53:59

臺階步數(shù)算法分析

2020-08-31 12:20:07

Python面試題代碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 女女爱爱视频 | 99久久精品免费看国产小宝寻花 | 中国一级大毛片 | 日本在线免费视频 | 国产一区视频在线 | 日本成人免费观看 | 午夜男人视频 | 亚洲综合伊人 | 中文字幕专区 | 国产精品久久久久久久 | 久久精品久久久久久 | 欧美日韩亚洲一区 | 精品一区二区三区在线播放 | 成人国产精品久久久 | 国产精品视频播放 | 久在线 | 精精国产xxxx视频在线播放 | 国产极品粉嫩美女呻吟在线看人 | 天天噜天天干 | 国产精品亚洲精品久久 | 亚洲精品久久久久久久不卡四虎 | 久久久久久久久久久久一区二区 | 免费在线国产视频 | 欧美黑人一区二区三区 | 亚洲精品视 | 天天插天天狠天天透 | 成人免费精品视频 | 日韩精品在线观看免费 | 国产农村一级国产农村 | 亚洲视频在线一区 | 人人干人人干人人 | 国产高清一区二区三区 | 成人在线电影在线观看 | www日本在线观看 | 免费视频一区二区 | 国产日韩欧美综合 | 日韩专区中文字幕 | 亚洲精品久久久一区二区三区 | 婷婷激情综合 | 日韩视频在线观看 | 操久久久|