給定一個列表和一個數字k,倒置第k個元素並留下下一個k元素。在整個列表中重複這一點。通過反轉我的意思是,改變數字的符號。顛倒數字列表並跳過其他數字
這是一個在亞馬遜的採訪問題,我在網站上看到的,我試圖通過思考如何解決它,確定我也想知道解決它的最快算法和你的想法。
我想過把數組分成K-Steps,然後倒置,跳過。然後像合併排序一樣合併數組。
給定一個列表和一個數字k,倒置第k個元素並留下下一個k元素。在整個列表中重複這一點。通過反轉我的意思是,改變數字的符號。顛倒數字列表並跳過其他數字
這是一個在亞馬遜的採訪問題,我在網站上看到的,我試圖通過思考如何解決它,確定我也想知道解決它的最快算法和你的想法。
我想過把數組分成K-Steps,然後倒置,跳過。然後像合併排序一樣合併數組。
複雜哈桑的溶液:
因爲你說你認爲hasan的解決方案是O(N^2),所以我想解釋你爲什麼錯了。因此,他建議:
for (int i=0; i < size; i+=k*2)
for (int j=0; j < k && i+j < size; j++)
arr[i+j] = -arr[i+j];
迭代的第一個循環數爲size/(k * 2)
和迭代的第二循環的數量是k
。 Hense,迭代總次數爲size/2
。這也是應該修改的數組中元素的數量。你做不到比這更好。
你可以做得比這更好。量子計算機上的複雜性是O(1)。 –
我假設馮諾依曼機器或類似的:)。你也可以用FPGA和固定大小做得更好。 –
什麼反轉意味着? – hasan83
更改數字的符號 –
@iccthedral還有什麼其他解決方法:)?更好的複雜性? –