題意﹕給了

個整數的數組

,問其本身是否幾何數列?若否,問能否經移除一個元素使得餘下的數列成為幾何數列?假設

。
首先,檢測

是否幾何數列不難,線性時間就能做到了,另需要特別留意首項為0的情況。但能否高效的做到檢測移除單項成為幾何數列就不簡單。直觀做法是
)
逐一移除,再檢測是否幾何數列,但對於這數據範圍,顯然有點慢。
但,可能的數列等比只有3個(這裡不考慮首項為0的情況,可特別處理)﹕

。第三個等比表示移除第二項,第二個等比表示移除首項,至於第一個等比,表示被移除的項在是第3至第N個其中一個。後兩個情況可以再應用一次線性時間的檢測,但第一個情況可以經對比有多少個餘項不符合等比數值即可。若不符合數至少有2,則表示移除第3至第N項其中之一都不能讓數列成為幾何數列。因此本題能以
)
時間內解決。
沒有留言:
張貼留言