首页 > 编程语言 > 详细

leetcode之26删除排序数组中的重复项Golang

时间:2020-09-11 16:33:36      阅读:57      评论:0      收藏:0      [点我收藏+]

 

 

  1. 我第一次的思路是;

  遍历排序数组,如果当前遍历到的值和前一个值相等,那么就用

// i是当前遍历到数组的位置
nums = append(nums[:i], nums[i+1:]...)

  使用append去掉切片中的元素,代码如下:

func removeDuplicates(nums []int) int {
    for i := 0; i < len(nums); {
        if i > 0 && nums[i] == nums[i-1] {
            nums = append(nums[:i], nums[i+1:]...)
        } else {
            i++
        }
    }
    return len(nums)
}

但是提交的时候发现用时比较长,哈哈,所以参考了题解,使用双指针的方式,如下:

  1. 双指针思路

  • 定义快慢两个指针,初始位置分别是0,1

  • 然后向后遍历快指针:

    1. 当快指针的值和慢指针的值相等的时候,就不做处理,继续向后遍历快指针

    2. 当快指针的值和慢指针的值不相等的时候,就将慢指针向后挪动一位,并且将快指针指向的值赋值给慢指针

    3. 重复上述过程,直到遍历完整个数组

  • 最后返回慢指针(注意加1),就是新的去重后的数组的长度了。

代码如下:

func removeDuplicates(nums []int) int {
    i := 0
    for j := 1; j < len(nums); j++ {
        if nums[i] == nums[j] {
            continue
        }
        i++
        nums[i] = nums[j]
    }
    return i + 1
}

  

 

leetcode之26删除排序数组中的重复项Golang

原文:https://www.cnblogs.com/gyyyl/p/13651208.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!