2.删除有序数组中的重复项-力扣

213 阅读1分钟

题目

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。

解题

//第一种运用set数组
func removeDuplicates(_ nums: inout [Int]) -> Int {
    if nums.isEmpty { return 0 }
    let set = Set(nums)
    nums = Array(set)
    nums.sort()
    return nums.count
}
//使用双指针算法
func removeDuplicates(_ nums: inout [Int]) -> Int {
    if nums.count == 0 {
        return 0
    }
    nums.sort()
    var result = 0
    for i in 1 ..< nums.count {
        if nums[i] != nums[result] {
            result += 1
            nums[i] = nums[result]
        }
    }
    return result+1
}
//去掉重复选项
func removeDuplicates2(_ nums: inout [Int]) -> Int {
        if nums.count==0 || nums.count==1 {
            return nums.count
        }
        nums.sort()
        var index = 0
        while (index != nums.count-1){
            if nums[index]==nums[index+1] {
                nums.remove(at: index) //nums的元素减去1,知道相等退出循环
            }else {
                index = index + 1
            }
        }
        print(nums)
        return nums.count;
    }

var math = [2,1,2,3,44,6,32,7] // 我给的是无序数组,因此在代码中排序了一次

removeDuplicates2(&math)

总结

  1. 双指针算法:
  • 必须在有序数组中才有效
  • 并没有删除元素,而是替代值的方式(后一项的值等于前一项的值) 2.用while的方式去掉重复项:
  • 删除重复项,当index = nums.count-1 退出循环