测开面试题:原地删除已排序数组中的重复元素

📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)

📝 职场经验干货:

软件测试工程师简历上如何编写个人信息(一周8个面试)

软件测试工程师简历上如何编写专业技能(一周8个面试)

软件测试工程师简历上如何编写项目经验(一周8个面试)

软件测试工程师简历上如何编写个人荣誉(一周8个面试)

软件测试行情分享(这些都不了解就别贸然冲了.)

软件测试面试重点,搞清楚这些轻松拿到年薪30W+

软件测试面试刷题小程序免费使用(永久使用)


双指针法是一种高效的解决方案,适合原地操作数组。我们使用两个指针:一个慢指针 slow 用于指向去重后的数组的最后一个位置,另一个快指针 fast 遍历整个数组。

def remove_duplicates(nums):  
    """  
    原地删除已排序数组中的重复元素,返回去重后数组的长度。
    :param nums: List[int] - 已排序的数组  
    :return: int - 去重后数组的长度  
    """  
    if not nums:  # 如果数组为空,直接返回0  
        return 0  

    # 慢指针初始化为0,表示去重后数组的最后一个有效位置  
    slow = 0  

    # 快指针从1开始遍历数组  
    for fast in range(1, len(nums)):  
        if nums[fast] != nums[slow]:  # 如果快指针指向的值与慢指针不同  
            slow += 1  # 慢指针向前移动一位  
            nums[slow] = nums[fast]  # 更新慢指针位置的值为快指针的值  

    # 返回去重后数组的长度(慢指针+1)  
    return slow + 1  

# 测试代码  
nums = [1, 1, 2, 2, 3, 4, 4, 5]  
length = remove_duplicates(nums)  
print("去重后的数组长度:", length)  
print("去重后的数组内容:", nums[:length])
详细解释:
  1. 输入数组nums 是一个已排序的数组。

  2. 慢指针 slow:表示去重后的数组的最后一个有效位置。

  3. 快指针 fast:用于遍历数组,寻找与 nums[slow] 不同的元素。

  4. 去重逻辑

    • 如果 nums[fast] != nums[slow],说明发现了一个新元素。

    • 将 slow 向前移动一位,并将 nums[fast] 的值复制到 nums[slow]

  5. 返回结果:最终返回 slow + 1,即去重后数组的长度。

时间复杂度:
  • O(n):快指针遍历整个数组一次,时间复杂度为线性。

空间复杂度:
  • O(1):只使用了两个指针(slow 和 fast),没有使用额外的空间。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】
在这里插入图片描述​​​
在这里插入图片描述​​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值