26. 删除排序数组中的重复项

题意

有序重复数组,原地去重,输出结果以及长度

题解

思路:双指针,均从头开始,一个指向不重复的最后一位(指针p),另一个进行遍历操作(指针i),利用有序性,如果指针i>指针p的话,说明到了下一个数,p向下移动一位并赋值为i的值,直到遍历完成。

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

    1. func removeDuplicates(nums []int) int {
    2. var p int
    3. for i := 0; i < len(nums); i++ {
    4. if nums[i] > nums[p] {
    5. p += 1
    6. nums[p] = nums[i]
    7. }
    8. }
    9. return p + 1
    10. }

    结果:

  • 执行用时:8 ms, 在所有 Go 提交中击败了86.24%的用户

  • 内存消耗:4.6 MB, 在所有 Go 提交中击败了99.93%的用户