最近在論壇看到乙個google面試題(原帖: [url] 有點興趣就動手試了一下, 結果還比較滿意.
我認為, 本題的考點不在於如何將原陣列轉成目標陣列(迴圈除2就完了), 而是在於如何將目標陣列還原到原陣列,
因此, 前段**沒有給出, 只給出了如何還原的**, 以表我的思路:
**中傳遞的引數rate為原陣列中能被2整除的最小次數, 他影響還原放大的結果, 此數值應該在第一步從原陣列轉換到目標陣列時進行記錄, 如不給此引數, 得到的還原數為最小等差序列.
測試
new arrayrecovery().recovery([1, 63, 47, 125, 39, 187, 109, 249, 35, 311, 171])
//output [32, 63, 94, 125, 156, 187, 218, 249, 280, 311, 342]
new arrayrecovery().recovery([1, 1, 3, 1, 5, 3, 7, 1, 9, 5, 11], 5)
//output [32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352]
new arrayrecovery().recovery([11, 5, 9, 1, 7, 3, 5, 1, 3, 1, 1, 0, -1], 5)
//output [352, 320, 288, 256, 224, 192, 160, 128, 96, 64, 32, 0, -32]
new arrayrecovery().recovery([-108, -81, -54, -27, 0, 27, 54, 81], 2)
//output [-432, -324, -216, -108, 0, 108, 216, 324]
new arrayrecovery().recovery([1, 3, 19])
//output [17, 18, 19] <--- wrong
new arrayrecovery().recovery([1, 3])
//output [2, 3]
new arrayrecovery().recovery([1])
//output [1]
new arrayrecovery().recovery()
//output
小弟認為**演算法上仍有可以優化之處, 比如可以尋找一種演算法, 沒有必要對整個陣列進行全對比, 以得到差值命中率表, 希望各位大大給出意見...
力扣 動態規劃 等差陣列劃分
描述 如果乙個數列至少有三個元素,並且任意兩個相鄰元素之差相同,則稱該數列為等差數列。例如,以下數列為等差數列 1,3,5,7,9 7,7,7,7 3,1,5,9 以下數列不是等差數列。1,1,2,5,7 陣列 a 包含 n 個數,且索引從0開始。陣列 a 的乙個子陣列劃分為陣列 p,q p 與 q...
codevs等差數列
題目描述 description 給定n 1 n 100 個數,從中找出盡可能多的數使得他們能夠組成乙個等差數列.求最長的等差數列的長度.輸入描述 input description 第一行是乙個整數n,接下來一行包括了n個數,每個數的絕對值不超過10000000.輸出描述 output descr...
網易等差數列
如果乙個數列s滿足對於所有的合法的i,都有s i 1 s i d,這裡的d也可以是負數和零,我們就稱數列s為等差數列。小易現在有乙個長度為n的數列x,小易想把x變為乙個等差數列。小易允許在數列上做交換任意兩個位置的數值的操作,並且交換操作允許交換多次。但是有些數列通過交換還是不能變成等差數列,小易需...