光看題目是很是簡單的,但這裏有一個限制條件,就是必須在原地修改數組,而且只能使用 O1 的額外空間。數組
其實前面也遇到過相似的限制,好比環形鏈表,當時咱們的解決方案是快慢指針:事實上,在限制額外空間爲 O1 的時候,一般都能使用快慢指針的方式來解決問題,這道題目的目的其實也就是幫助咱們創建使用快慢指針的思惟。ide
這裏咱們以數組 [1, 1, 2, 3, 3 ] 爲例,建立兩個指針 slow 和 fast 都指向 arr[0]:指針
以上述步驟完成對整個數組的遍歷以後,數組就已經實現了重排,而 slow 則指向其尾端,具體能夠看看下圖:blog
思路很簡單,這裏直接實現代碼便可:ip
var removeDuplicates = function (nums) { const len = nums.length; let slow = 0; for (let fast = 0; fast < len; fast++) {if (nums[fast] !== nums[slow]) { slow++; nums[slow] = nums[fast]; } } return slow + 1; };複製代碼
tip????:題目需求是返回新數組的長度,因此返回 slow +1rem
結果以下:get