題目:返回將一維陣列向右旋轉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...