【Daily Interview】- 22 刪除排序數組中的重複項

題目

img01

光看題目是很是簡單的,但這裏有一個限制條件,就是必須在原地修改數組,而且只能使用 O1 的額外空間。數組

其實前面也遇到過相似的限制,好比環形鏈表,當時咱們的解決方案是快慢指針:事實上,在限制額外空間爲 O1 的時候,一般都能使用快慢指針的方式來解決問題,這道題目的目的其實也就是幫助咱們創建使用快慢指針的思惟。ide

這裏咱們以數組 [1, 1, 2, 3, 3 ] 爲例,建立兩個指針 slow 和 fast 都指向 arr[0]:指針

  • 每一次遍歷 fast 都自增 1
  • 當 slow == fast,則 slow 不變
  • 當 slow ≠ fast,則 slow 自增 1,而且將 fast 位置的值賦值過來

以上述步驟完成對整個數組的遍歷以後,數組就已經實現了重排,而 slow 則指向其尾端,具體能夠看看下圖:blog

img02

思路很簡單,這裏直接實現代碼便可: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

img03

相關文章
相關標籤/搜索