面試筆記|算法面試真題(一)

前言:這是曾經(jīng)公司的筆試題,現(xiàn)在做起來仍很有意思正林,遂分享出來,感興趣的一起來挑戰(zhàn)吧颤殴!關于前公司觅廓,表示還真挺懷念的,相關內(nèi)容也曾經(jīng)發(fā)了一篇文章紀念程序員在簡書|Bye涵但,28樓的歲月

  • 1.在最短的計算時間和最小的存儲空間限制下完成下面這函數(shù):

    void reverse_words(char *sentence)
    //
    // 輸入串: 一個以空格分隔的字符串杈绸,字符串中只包含英文字母和空格
    // 輸出串: 一個與輸入完全顛倒的字符串帖蔓,但每個單詞保持原樣
    //
    // 例子:
    //
    // char test[]= "Now is the winter of our discontent made glorious summer by this son of York";
    //
    // reverse_words(test);
    //
    // printf(“%s\n”, test);
    //
    // 輸出結(jié)果:
    //
    // York of son this by summer glorious made discontent our of winter the is Now

注意事項:

  1. 比如說一個需要O(n)計算時間和O(1)存儲空間的算法要比一個需要O(n^2)計算時間和O(n)存儲空間的算法要好。
  2. 你可以用任何ANSI C庫里的字符串函數(shù)來解決問題瞳脓。

  • 2.已知一個數(shù)據(jù)結(jié)構(gòu):
struct s_node
{
    struct s_node *next;
    struct s_node *reference;
};

在最短的時間和最小的空間限制下完成下面這函數(shù):

struct s_node *duplicate_list(struct s_node *list)
//
// 輸入: 一個單項鏈接的列表塑娇,每個節(jié)點都包含該鏈表中隨機的一個節(jié)點的引用
// 輸出: 一個輸入鏈表一摸一樣的鏈表,并且輸出鏈表中的任何一個節(jié)點都和輸入鏈表不相關

注意事項:

  1. 比如說一個需要O(n)計算時間和O(1存儲空間)空間的算法要比一個需要O(n^2)計算時間和O(n)存儲空間的算法要好劫侧。
  2. 你可以在計算過程中修改原始鏈表埋酬,只要你能在算法完成時恢復原始鏈表就好。
  3. 最終得到的鏈表必須符合鏈表原始的數(shù)據(jù)結(jié)構(gòu)定義烧栋,并且必須在一個與原始鏈表分離的內(nèi)存空間写妥。

  • 3.寫一個函數(shù)來找到Boggle填字游戲中的所有單詞。

如果你不知道什么是Boggle审姓,你可以先baidu或者google一下珍特,他們會解釋得比我清楚,但我在這里還是以例子解釋下:

比如說一個3x3的Boggle表:

y o x
r b a
v e d

根據(jù)規(guī)則你可以把相鄰的字母在不重復的情況下串聯(lián)起來組成單詞魔吐,比如說:

bred, yore, byre, abed, oread, bore, orby, robed, broad, byroad, robe
bored, derby, bade, aero, read, orbed, verb, aery, bead, bread, very, road

但是robbed或者rober不在其中扎筒,因為他們需要重新用到Boggle表中的字母。board和dove也不在其中酬姆,因為他們需要不相鄰的字母嗜桌。

#define MAX_ROWS 3
#define MAX_COLUMNS 3
#define MAX_WORDS 27
#define MAX_WORD_LENGTH MAX_ROWS*MAX_COLUMNS
#define MIN_WORD_LENGTH 4

typedef struct
{
    char letter[MAX_ROWS][MAX_COLUMNS];
}
BoggleBoard;

typedef struct
{
    char *words[MAX_WORDS];
    int numberOfWords;
}
Dictionary;

void BoggleSover(int rows, int columns, BoggleBoard *boggleBoard, char ** dictionary,Dictionary* answer)

  • 4.分別列出數(shù)組(array)和鏈表(list)的優(yōu)缺點。

  • 5.面向?qū)ο缶幊坛霈F(xiàn)之后辞色,繼承這種設計模式被越來越多的應用于軟件工程當中骨宠。但現(xiàn)在卻有人提出要少用繼承多用組合這種設計模式,這是為什么呢淫僻?

  • 6.下面這個陳述是正確的嗎诱篷?為什么壶唤?

我們知道TCP是一種面向連接的雳灵、可靠的、基于字節(jié)流的傳輸層通信協(xié)議闸盔,所以每當傳輸層通過TCP協(xié)議向另一端發(fā)出一個包悯辙,另一端的傳輸層就一定會收到完整并且順序正確的包,要么就整包都沒有收到迎吵。


答案后續(xù)更新躲撰,也歡迎各位大神能夠?qū)⑵浯鸢杆叫呕蛟u論于下方,共同探討進步击费。

解答:
1.先翻轉(zhuǎn)整個字符串拢蛋,再將每個子字符串反轉(zhuǎn)

class Solution:
def reverseWords(self, s: str) -> str:
    s = list(s)
    n = len(s)
    
    # 翻轉(zhuǎn)數(shù)組
    def reverse(s, i, j):
        while i < j:
            s[i], s[j] = s[j], s[i]
            i += 1
            j -= 1

    # 翻轉(zhuǎn)單個單詞
    def word_reverse(s):
        # 用雙指針找到一個單詞
        i = 0
        j = 0
        while i < n:
            # 找到一個單詞首字母
            while i < n and s[i] == " ":
                i += 1
            j = i
            # 找到一個單詞末位置
            while j < n and s[j] != " ":
                j += 1
            reverse(s, i, j - 1)
            i = j

    # 清除多余空格
    def clean_space(s):
        i = 0
        j = 0
        while j < n:
            # 找到一個單詞
            while j < n and s[j] == " ":
                j += 1
            # 單詞朝前移
            while j < n and s[j] != " ":
                s[i] = s[j]
                i += 1
                j += 1
            # 移動下一個單詞
            while j < n and s[j] == " ":
                j += 1
            if j < n:
                s[i] = " "
                i += 1
        return "".join(s[:i])

    reverse(s, 0, n - 1)
    word_reverse(s)
    return clean_space(s)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蔫巩,隨后出現(xiàn)的幾起案子谆棱,更是在濱河造成了極大的恐慌快压,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件垃瞧,死亡現(xiàn)場離奇詭異蔫劣,居然都是意外死亡,警方通過查閱死者的電腦和手機个从,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門脉幢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嗦锐,你說我怎么就攤上這事嫌松。” “怎么了意推?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵豆瘫,是天一觀的道長。 經(jīng)常有香客問我菊值,道長外驱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任腻窒,我火速辦了婚禮昵宇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘儿子。我一直安慰自己瓦哎,他們只是感情好,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布柔逼。 她就那樣靜靜地躺著蒋譬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪愉适。 梳的紋絲不亂的頭發(fā)上犯助,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機與錄音维咸,去河邊找鬼剂买。 笑死,一個胖子當著我的面吹牛癌蓖,可吹牛的內(nèi)容都是我干的瞬哼。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼租副,長吁一口氣:“原來是場噩夢啊……” “哼坐慰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起用僧,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤结胀,失蹤者是張志新(化名)和其女友劉穎两残,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體把跨,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡人弓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了着逐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片崔赌。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖耸别,靈堂內(nèi)的尸體忽然破棺而出健芭,到底是詐尸還是另有隱情,我是刑警寧澤秀姐,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布慈迈,位于F島的核電站,受9級特大地震影響省有,放射性物質(zhì)發(fā)生泄漏痒留。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一蠢沿、第九天 我趴在偏房一處隱蔽的房頂上張望伸头。 院中可真熱鬧,春花似錦舷蟀、人聲如沸恤磷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扫步。三九已至,卻和暖如春匈子,著一層夾襖步出監(jiān)牢的瞬間河胎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工旬牲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留仿粹,地道東北人搁吓。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓原茅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親堕仔。 傳聞我的和親對象是個殘疾皇子擂橘,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

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