一天一演算法(7) 刪除有序陣列的重複項

2021-09-23 18:35:51 字數 886 閱讀 5157

給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。

不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o(1) 額外空間的條件下完成。

示例 1:

給定陣列 nums = [1,1,2],

函式應該返回新的長度 2, 並且原陣列 nums 的前兩個元素被修改為 1, 2。

你不需要考慮陣列中超出新長度後面的元素。

示例 2:

給定 nums = [0,0,1,1,1,2,2,3,3,4],

函式應該返回新的長度 5, 並且原陣列 nums 的前五個元素被修改為 0, 1, 2, 3, 4。

你不需要考慮陣列中超出新長度後面的元素。

說明:為什麼返回數值是整數,但輸出的答案是陣列呢?

請注意,輸入陣列是以「引用」方式傳遞的,這意味著在函式裡修改輸入陣列對於呼叫者是可見的。

你可以想象內部操作如下:

// nums 是以「引用」方式傳遞的。也就是說,不對實參做任何拷貝

int len = removeduplicates(nums);

// 在函式裡修改輸入陣列對於呼叫者是可見的。

// 根據你的函式返回的長度, 它會列印出陣列中該長度範圍內的所有元素。

for (int i = 0; i < len; i++)

我的想法比較簡單,首先用乙個int length儲存陣列的長度,然後遍歷陣列,遇到重複的數就讓他後面的數取代他,然後往前移動,沒移動一次陣列,length就減一次1。

public int removeduplicates(int nums) 

length--;//陣列長度減一}}

return length;

}

一天一演算法(1) 快速排序

我去網上檢視了快速排序的 千篇一律,簡直乙個模子裡面印出來的,這樣沒意思,用的都是別人的思路。於是我自己動手寫了乙個,雖然 不夠簡潔,但是我覺得排序的目的應該達到了 快速排序演算法無非就是利用左右兩個指標,向左或者向右遍歷陣列,並且與基準點比較,從而達到排序的目的 首先 假設我們的無序數列是 5,1...

一天一演算法之歸併排序

歸併排序是3個時間複雜度為o nlogn 唯一乙個穩定的演算法,不過自己沒有實現出來。還好別人的 看懂了。using system using system.collections.generic using system.linq using system.text namespace sort ...

一天一演算法(43) 最小k個數

輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,超級簡單的題目,就是考察排序演算法而已 為了熟悉堆排序,使用了堆排 using system.collections.generic class solution heapsort...