刪除排序數組中的重複項

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

不要使用額外的數組空間,你必須在原地修改輸入數組並在使用 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。

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

做這道題我用兩個指針的方法,定義一個空指針,如果元素比較之下不同,就放在空指針內。數組完成排序後,只要arr[i] = arr[j],我們就增加 j 以跳過重複項。

當我們遇到arr[i] !=arr[j]時,跳過重複項的運行已經結束,因此我們必須把它arr[j]的值複製到arr[i + 1]上,接着遞增i,知道運行到最後一個位置

int removeDuplicates(int* arr,int sz)
{
  int i = 0;
  int j = 0;
  if(sz == 0)//先判斷給定數組的長度,如果長度爲0,則直接輸出
	  return 0;
  for(j = 1;j < sz;j++)
  {
	  if(arr[i] != arr[j])
	  {
		  i++;
		  arr[i] = arr[j];
	  }
  }
  return i+1;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章