給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。
不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 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++)
(1)方法:雙指標法
原理:1,只要有重複的就往陣列後面移,只需保證陣列前面存放不重複的部分,並且返回長度;
2,不需要在乎返回長度後面的部分是否是原陣列的元素;
3,那就鎖定頭指標,乙個指標再往下遍歷陣列元素,只要它的值和頭指標的值相同則跳過,不同則將這個值放到頭指標的下個位置,然後頭指標往後走一步,移動指標繼續往後走,重複操作直到走完。
4,其實只遍歷陣列一遍就完成了,把所有不重複的元素放到前面,並返回長度,而不在乎後面值是否正確;
class solution
}return i + 1;
}}
注意:不需要考慮陣列中超出新長度後面的元素,不管它對與否;
比如:[1,1,2]經過上述**操作以後其實變成了[1,2,2];但是我們返回新的長度是2,也就是只要了前兩位,這正是答案所在!
刪除排序陣列中的重複項
題目描述 給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。示例 給定陣列 nums 1,1,2 函式應該返回新的長度2,並且原陣列 nums 的前兩個元素被修改為...
刪除排序陣列中的重複項
給定陣列 nums 1,1,2,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素被修改為 1,2。你不需要考慮陣列中超出新長度後面的元素。給定 nums 0,0,1,1,1,2,2,3,3,4 函式應該返回新的長度 5,並且原陣列 nums 的前五個元素被修改為 0,1,2,3,4。...
刪除排序陣列中的重複項
考慮列表為空為只有乙個元素的情況 if nums is none or len nums 1 return len nums i 1 while i len nums 遍歷陣列,如果當前值跟前面的值相等,則刪除當前元素,如果不等,說明不是重複元素,則繼續遍歷下乙個元素 if nums i nums ...