美文网首页
swift 删除排序数组中的重复项

swift 删除排序数组中的重复项

作者: 光光6 | 来源:发表于2021-10-13 14:27 被阅读0次

    条件:给你一个无序数组 nums ,请你 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

    例1:给定一个数组nums为[1,4,3,2,1],去掉重复元素应该返回4

    输入:nums = [0,0,1,1,2]

    输出:3, nums = [0,1,2]

    解释:函数应该返回新的长度 3 ,并且原数组 nums 的前两个元素被修改为 0,1, 2 。不需要考虑数组中超出新长度后面的元素。

    例2:

    输入:nums = [1,4,3,2,1]

    输出:4, nums = [1,2,3,4]

    解释:函数应该返回新的长度 4 ,并且原数组 nums 的前两个元素被修改为 1,2,3,4 。不需要考虑数组中超出新长度后面的元素。

    1)数组排序再遍历数组,取出不同的数字存储在临时数组中,最后将临时数组赋值给原数组,即为所求

     //MARK:- 删除重复项

        funccheckRemoveDuplicates(_nums:inout[Int]) ->Int{

            ifnums.count==0{

                    return0

                }

              nums = nums.sorted()

                varcurrent :Int= nums[0]

                //存储不同的数字

                varidx : [Int] = [current]

                //  遍历

                foriin1..<nums.count{

                    ifcurrent==nums[i] {

                        continue

                    }else{

                        idx.append(nums[i])

                        current = nums[i]

                   }

                }

                nums = idx

                print(nums)

            return nums.underestimatedCount

        }

    2)双指针法,符合题目要求

    先数组排序后,定义连个指针 i 和 j ,其中 i 是慢指针,代表数组中连续不重复的数字的下标,j是快指针,代表原数组的下标,遍历数组,只要 nums[i] = nums[j] , 就增加 j 跳过重复的数字,当 nums[i] != nums[j] 时,就把num[j]的值赋值到num[i+1]中,然后i递增,依次重复上述过程至数组达到末尾

       //MARK:- 删除重复项

        funccheckRemoveDuplicates(_nums:inout[Int]) ->Int{

            ifnums.count==0{

                return0

            }

            nums = nums.sorted()

            //慢指针,代表不同数组的下标

            vari =0

            //j为快指针

            forjin1..<nums.count{

                ifnums[j]!=nums[i] {

                    i+=1

                    nums[i] = nums[j]

                }

            }

            print(nums[0...i])

            returni+1

        }

    3)时间复杂度:O(n)

    备注:因为数组是排序的,只要是相同的肯定是挨着的,我们只需要遍历所有数组,然后前后两两比较,如果有相同的就把后面的给删除。

    相关文章

      网友评论

          本文标题:swift 删除排序数组中的重复项

          本文链接:https://www.haomeiwen.com/subject/cjosoltx.html