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