面試題4 陣列旋轉

2021-08-19 17:44:09 字數 562 閱讀 3333

題目:返回將一維陣列向右旋轉k個位置的結果。比如,一維陣列,k=2時,返回結果時。要求常數級空間複雜度,允許修改原來陣列。

書中給出的思路:

如果允許額外分配線性空間,那麼可以錯位複製原有陣列的元素。如果允許修改原有陣列,那麼我們可以通過三次反轉陣列來實現陣列旋轉,不需要申請額外空間,並且每次反轉時間為o(n),從而實現線性的時間複雜度和常數級的空間複雜度。

三次反**第一次反轉整個陣列;第二次反轉前k個;第三次反轉剩下的數。例如:

一維陣列,k=2

第一次反**5,4,3,2,1

第二次反**4,5,3,2,1

第三次反**4,5,1,2,1     即為最終結果

書上的**實現:

func totatek(s int, k int) int 

return s

}func reverse(a int, start ,end int)

}

我自己的思路實現:

func totatek(s int, k int) int

面試題17 旋轉陣列搜尋

題目 給定乙個有序陣列的旋轉和乙個目標值,返回目標值在該陣列的下標,如果不存在,則返回 1.假設該陣列沒有重複值.實現 使用二分查詢 package main import fmt func min a,b int int return a func searchrotatedarray a int...

面試題總結4

演算法題 1 m個珠子n種顏色,圍成一串,從中找到包含n種顏色的最小子串。比如123234212,子串是3421 演算法的思想是先找到其中乙個包含所有顏色的子串,起始位置i,終止位置j,並且第j種顏色是第一次出現,然後從第i個位置開始刪除出現過的顏色,i往後移動乙個位子,同事j跳到與之前i位置相同的...

面試題 旋轉字串

題目 定義字串的左旋轉操作 把字串前面的若干個字元移動到字串的尾部。如把字串abcdef左旋轉2位得到字串cdefab。請實現字串左旋轉的函式。要求時間對長度為n的字串操作的複雜度為o n 輔助記憶體為o 1 思路 將字串看做ab兩部分,將a反轉,再將b反轉,最後將反轉後的a 反轉後的b一起反轉就o...