LeetCode之从排序数组中删除重复项-Swift

栏目: Swift · 发布时间: 7年前

内容简介:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。在题目的描述中我们可以总结出一下几点要求:通过上面的要求我们可以通过在一次遍历中判断元素是否相同并交换两个元素的位置来实现,

给定一个 排序 数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 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。

你不需要考虑数组中超出新长度后面的元素。
复制代码

答案

在题目的描述中我们可以总结出一下几点要求:

  • 只能遍历一遍数组
  • 不能创建新的数组
  • 不需要考虑数组中超出新长度后面的元素

通过上面的要求我们可以通过在一次遍历中判断元素是否相同并交换两个元素的位置来实现, 其实并没有将数组中的元素真正的删除,只是交换了位置

代码如下:

func removeDuplicates(_ nums: inout [Int]) -> Int {
    var count = 1
    if nums.count == 0 {
        return 0
    }
    
    for idx in 1..<nums.count {
        if nums[idx] != nums[idx - 1] {
            nums[count] = nums[idx]
            count = count + 1
        }
    }
    return count
}
复制代码

nums = [0,0,1,1,1,2,2,3,3,4] 的执行结果如下:

第一次:第一个元素0和第二个元素0比较,元素相同,进入下一次循环。当前数组:
[0, 0, 1, 1, 1, 2, 2, 3, 3, 4]
第二次:第三个元素1和第二个元素0比较,元素不同,将第二次出现的元素0(即index == count的元素0),count加一,进入下一次循环。当前数组:
[0, 1, 1, 1, 1, 2, 2, 3, 3, 4]
第三次:第四个元素1和第三个元素1比较,元素相同,进入下一次循环。当前数组:
[0, 1, 1, 1, 1, 2, 2, 3, 3, 4]
第四次:第️五个元素1和四个元素1比较,元素相同,进入下一次循环。当前数组:
[0, 1, 1, 1, 1, 2, 2, 3, 3, 4]
第五次:第六个元素2和五个元素1比较,元素不同,将第二次出现的元素1(即index == count的元素1)与第六个元素2互换,count加一,进入下一次循环。当前数组:
[0, 1, 2, 1, 1, 2, 2, 3, 3, 4]
第六到n次,以此类推:
[0, 1, 2, 1, 1, 2, 2, 3, 3, 4]
[0, 1, 2, 3, 1, 2, 2, 3, 3, 4]
[0, 1, 2, 3, 1, 2, 2, 3, 3, 4]
[0, 1, 2, 3, 4, 2, 2, 3, 3, 4]
复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Linux Device Drivers

Linux Device Drivers

Jonathan Corbet、Alessandro Rubini、Greg Kroah-Hartman / O'Reilly Media / 2005-2-17 / USD 39.95

Device drivers literally drive everything you're interested in--disks, monitors, keyboards, modems--everything outside the computer chip and memory. And writing device drivers is one of the few areas ......一起来看看 《Linux Device Drivers》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具