題目:
給定一陣列a[n],我們希望構造陣列b [n],其中b[j]=a[0]*a[1]…a[n-1] / a[j],在構造過程中,不允許使用除法:
要求o(1)空間複雜度和o(n)的時間複雜度;
除遍歷計數器與a[n] b[n]外,不可使用新的變數(包括棧臨時變數、堆空間和全域性靜態變數等);
實現程式(主流程式語言任選)實現並簡單描述。
這道題,具體解法大家可看下:
下面我說說我的一些收穫:
1)o(1)的空間複雜度:常量級變數,但不可使用新的變數,題目有要求
對於如此有規律的b[j],可以像數學裡的數列一樣,先寫出幾個式子,找找規律。
b[4] = a[0] * a[1] * a[2] * a[3] ;
b[3] = a[0] * a[1] * a[2] * a[4];
b[2] = a[0] * a[1] * a[3] * a[4];
b[1] = a[0] * a[2] * a[3] * a[4];
b[0] = a[1] * a[2] * a[3] * a[4];
可看到兩個三角形。
表示第一次迴圈,形成左上角
(**見)
b[0] = 1;
inti;
for(i = 1; i
b[i] = b[i - 1] * a[i - 1];
第二次迴圈,完成計算b[n].
for(i = maxn - 1; i >= 1; i--)
注意,第二次迴圈時,像博主先前說的
inttemp = 1;
for(i = maxn - 2; i >= 0; i--)
由於用了新的變數temp,不符合『不可使用新的變數』這一規定。
2012騰訊實習生筆試題
問題描述 兩個陣列a n b n 其中a n 的各個元素值已知,現給b i 賦值,b i a 0 a 1 a 2 a n 1 a i 要求 1.不准用除法運算2.除了迴圈計數值,a n b n 外,不准再用其他任何變數 包括區域性變數,全域性變數等 3.滿足時間複雜度o n 空間複雜度o 1 分析 ...
騰訊2012實習生招聘筆試題
由此觀之,基本上我知道的錯誤率就會很小。像基本的資料結構與演算法。但是不知道的錯誤率接近100 了,比如作業系統 資料庫 linux 設計模式的題。但是這些題其實也是很基礎的,與考研題類似,甚至還沒有達到考研題的難度。但是現在主要是攻破c 語言和資料結構與演算法的堡壘,其他型別的題目只能等後期 建設...
騰訊2012實習生筆試題 答案解析
選擇 d。迴圈佇列的front和rear必有乙個不指向實質元素,不然無法判斷佇列滿或空。c。是這樣的原理,磁碟會一直朝某個方向旋轉,不會因為處理資料而停止。本題要求順序處理r1到r10,起始位置在r1,一周是20ms,共10個記錄,所以每個記錄的讀取時間為2ms。首先讀r1並處理r1,讀r1花2ms...