首页 > 其他分享 >【面试题解答】一个有序数组 nums ,原地删除重复出现的元素

【面试题解答】一个有序数组 nums ,原地删除重复出现的元素

时间:2024-08-04 09:55:18浏览次数:16  
标签:count 面试题 1.2 nums 示例 元素 print 解答

面试题解答

仅供学习


文章目录


题目

在这里插入图片描述
要解决这个问题,可以使用双指针方法进行原地修改,以确保每个元素最多出现两次。


一、python代码

1.1 代码

def removeDuplicates(nums):
    if not nums:
        return 0

    # 指针 j 用于维护新数组的位置
    j = 0
    # 当前元素计数器
    count = 1

    # 遍历数组
    for i in range(1, len(nums)):
        # 如果当前元素与前一个元素相同,则增加计数
        if nums[i] == nums[i - 1]:
            count += 1
        else:
            count = 1  # 重置计数器

        # 只保留当前元素的前两次出现
        if count <= 2:
            nums[j] = nums[i]
            j += 1

    return j

1.2 示例用法

1.2.1 示例1

nums1 = [1, 1, 1, 2, 2, 3]
length1 = removeDuplicates(nums1)
print(length1) # 输出: 5
print(nums1[:length1]) # 输出: [1, 1, 2, 2, 3]

1.2.2 示例2

nums2 = [0, 0, 1, 1, 1, 1, 2, 3, 3]
length2 = removeDuplicates(nums2)
print(length2) # 输出: 7
print(nums2[:length2]) # 输出: [0, 0, 1, 1, 2, 3, 3]

二、讲解

2.1 初始化

  • j 指针用于跟踪新数组的位置。
  • count 计数器用于跟踪当前元素出现的次数。

2.2 遍历

  • 从第二个元素开始(i = 1),检查当前元素是否与前一个元素相同。
  • 如果相同,则 count 增加;否则,重置 count 为 1。
  • 如果 count 不超过 2,将当前元素放到 j 指向的位置,并移动 j 指针。

2.3 返回

  • 函数返回 j,即新数组的长度。

标签:count,面试题,1.2,nums,示例,元素,print,解答
From: https://blog.csdn.net/a72944392/article/details/140837657

相关文章

  • Java面试题
    目录一、你觉得Java好在哪里?二、多态是什么意思?三、Java中hashCode和equals方法是什么?它们和==各有什么区别?四、动态代理是什么?五、什么是序列化?什么是反序列化?六、String,StringBuffer,StringBuilder的区别?七、JDK和JRE的区别八、注解是什么原理九、反射用过......
  • Android最全8万字Fragment面试题及参考答案(持续更新)
    目录什么是Fragment?Fragment和Activity之间的关系是什么?为什么要使用Fragment而不是直接使用多个Activity?Fragment是如何被添加到Activity中的?如何从Activity中移除一个Fragment?Fragment可以嵌套吗?如何实现?如何获取当前Activity中的Fragment?如何通过FragmentManager......
  • 数据类型之面试题
    1.整数拓展二进制在数字前输入0b以此类推2.浮点数拓展正常来说,c1和c2输出的小数都是0.1。那么c1就应该等于c2,但是java程序最后给到的却是错误。很明显c4要大于c3,但是java程序却给到正确。由此得出结论:浮点数是有误差的,是一种约等于,并不精确一定不要用浮点数进行大小的比......
  • Java面试题:请问接口与抽象类有何区别?
    引言在OOD(面向对象设计)中,经常会用到抽象类或接口。而在使用过程中,也许会有不少人认为接口和抽象类差不多,然后就想当然地觉得可以相互替换。事实上,虽然他们有很多相似点,但也有很大差异。面试官通常会问你他们到底有哪些差异,以考察你的面向对象功力够不够。下面我就从三个层面谈......
  • Java面试题合集(持续更新)
    1、redis缓存穿透,缓存击穿以及缓存雪崩问题和对应的解决方案缓存穿透:当客户端访问一个不存在的数据,这个数据在缓存和数据库中都不能命中,如果有大量的这种穿过缓存直接访问数据库的请求,就会给数据库带来很大压力。解决思路:缓存空对象:当发现数据库中也没有该数据时,我们把这......
  • 全网最强Java面试题 很详细了!!!
    一、缓存面试官:什么是缓存穿透 ?怎么解决?候选人:(穿透无中生有Key,布隆过滤NULL隔离)嗯~~,我想一下缓存穿透是指查询一个一定不存在的数据,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到DB去查询,可能导致DB挂掉。这种情况大概率是遭到了攻......
  • Postman高频面试题及答案汇总(接口测试必备)
    Postman在软件测试的面试中,可以说是必考题了,既然是高频考题,当然得为粉丝宝宝们整理一波题库喽~一、Postman在工作中使用流程是什么样的?二、你使用过Postman的哪些功能?三、Postman如何管理测试环境?四、Postman如何实现接口关联?五、Postman参数化有哪几种方式?六、Postman中......
  • 经典面试题:如何测试矿泉水瓶?
    一、外观测试瓶身检查:确保瓶身完整,没有破损、凹陷或变形。检查瓶身上的广告和图案的背景颜色、字体颜色是否符合设计要求,且没有错别字。检查瓶身上的纹路、线条、图标布局是否合理,其间距、大小是否符合设计要求。瓶身底部尺寸、高度尺寸以及口径尺寸是否符合设计要求......
  • 经典面试题:如何测试矿泉水瓶?
    一、外观测试瓶身检查:确保瓶身完整,没有破损、凹陷或变形。检查瓶身上的广告和图案的背景颜色、字体颜色是否符合设计要求,且没有错别字。检查瓶身上的纹路、线条、图标布局是否合理,其间距、大小是否符合设计要求。瓶身底部尺寸、高度尺寸以及口径尺寸是否符合设计要求......
  • 60道测开面试题,背完直接涨工资
    今天整理的面试题可以保障通过技术面试,但是经历的项目,对测试工作的感觉和理解才是通往大厂的门票!01一面题目1、Stringstr=newString(“abc”);会建几个对象?Stringstr1=“abc”,str==str1?//false;2、你用过一些什么数据结构?(这是一个套路)3、你说说ArrayList和L......