面試1題解析

2021-06-05 17:12:02 字數 675 閱讀 1616

題目:有從1到n共n個數,亂序,隨意去掉其中兩個數,用o(n)的時間複雜度和o(1) 的空間複雜度求是哪兩個數

演算法簡單描述如下:

由於僅少了兩個數,所以可證僅有兩個鏈是開放的,其他的鏈都是閉合的。

1.標記訪問過的元素

2.每次找到乙個單向非閉合的鏈,就把它表頭a[i]的下標i記錄下來,並更改表頭a[i]的值為表尾t。

3.最後輸出記錄下來的兩個表尾,即是缺少的兩個元素。

由1.2.保證了平均每個元素至多被訪問兩次。

為了簡便僅舉一例子說明:

為方便,考慮0到n-1這n個數

例如一共有6個數去掉了兩個,3 和 5,輸入為 4 2 0 1 ? ?

其中有兩個鏈不是閉合的

a[3]=1 a[1]=2 a[2]=0 a[0]=4 a[4]=?

a[5]=?

這兩個鏈的頭的下標,即是缺少的元素

code:

/*

* 最壞情況下時間複雜度為2n即o(n),空間複雜度為o(1) 陣列的每個元素平均最多被訪問兩次。

*/void find2ofnt(vector&a, int &n1, int &n2)while (0<=t && tt || t==i) continue;

n-1==t ? n1=i:n2=i;

}}

習題解析1

百錢買百雞問題,公雞3文錢,母雞2文錢,小雞一文錢3只 首先我們要知道每個種類最多能買多少只,公雞最多能買33只,母雞最多買50只,小雞300只 先迴圈公雞巢狀迴圈母雞的隻數,最後小雞就是100 x y 在判斷是否是100文錢買100隻雞 計算器程式 首先題目說的是根據輸入符號判斷運算 就要定義 任...

面試題解析

1.繼承執行順序 當兩個類之間有繼承關係時,第一次構造子類的例項時,是按照如下順序進行的 1.子類的靜態成員初始化語句 2.子類的靜態建構函式 3.子類的非靜態成員初始化語句 4.父類的靜態成員初始化語句 5.父類的靜態建構函式 6.父類的非靜態成員初始化語句 7.父類的建構函式 8.子類的建構函式...

情景模擬面試真題解析

近幾年的公務員面試中題目的設定越來越不再拘泥於傳統的題型,相反更加求新求變。情景模擬就是一典型的新題型。我們結合一道真題看一下此類題目如何回答。題目 農民工子弟學校缺師資 資金 辦學場所,需要教育主管負責人支援,請把主考官作為教育主管負責人,假設你是農民工子弟學校校長,你該怎麼說服這位負責人?請現場...