problem:
長度為n的陣列中,每個元素均在0-n-1的範圍內,找到重複的數字:
思路1: 排序,時間複雜度o(nlogn) 然後輸出相同的元素
思路2:hash表,每次查詢一次hash表的時間複雜度為o1,但是要消耗乙個空間複雜度為on的hash表來彌補
思路3: 因為每個元素大小均在0-n-1之間,因此掃瞄整個陣列。第r個元素,先比較r與array[r]是否相等,如果相等,那麼往後掃瞄,如果不相等,與第r個元素比較,如果兩個元素相等,那麼找到相同元素,如果不相等,兩者換位,直到相等為止。
時間複雜度計算: 雖然是巢狀for迴圈,但是內部for迴圈其實所做的交換位置只需要一次交換,因此時間複雜度為o(1)
因為所有操作均在陣列上進行,因此空間複雜度為o(1)
//code
func
countarray
(array [
]int
)int
else
else}}
}return count
}func
main()
fmt.
println
(countarray
(array)
)}
劍指offer 面試題3
思路 從左下角或者右上角開始比較 簡單版本 查詢方式從右上角開始查詢 如果當前元素大於target,左移一位繼續查詢 如果當前元素小於target,下移一位繼續查詢 進行了簡單的修改,可以判定輸入型別為字元的情況 查詢方式從左下角開始查詢 如果當前元素大於target,上移一位繼續查詢 如果當前元素...
劍指offer面試題3
前言 從最近的比賽中,真的可以看出來自己做題目太少了,一些常見的演算法,思路都不怎麼會,接下來要好好努力了 分析 書中給的分析思路很好,要解決乙個複雜的問題,最有效的方法就是從乙個具體的問題入手,這道題就可以舉例子,查詢7這個元素,首先從右上角開始,9比7大,所以9所在的列不會有,查詢8,比7大,所...
劍指offer面試題7
面試題7 用兩個棧實現佇列 using namespace std template class cqueue 預備知識 佇列 佇列也是一種常見的資料結構 特點是先進先出 fifo 在stl中有stack和queue兩個容器 template class stack 成員函式 empty size ...