许加 2023-09-04 20:33 采纳率: 77.3%
浏览 7
已结题

python语法问题


cnt = 0
nums = [1,2,2,5,6,7]
n = len(nums)
for i in range(n):
    for j in range(i+1,n):
        if nums[i]==nums[j]:
            for k in range(j,n-1):
                 nums[k] = nums[k+1]
            cnt+=1
expectedNums=n-cnt

这段代码的目的是删除有序数组的重复项,最后得到一个删除后数组新长度,为什么这段代码不对?

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-04 22:10
    关注

    【以下回答由 GPT 生成】

    这段代码不能正确地删除有序数组的重复项的原因是,它使用了一个嵌套的循环来遍历数组并找到重复的元素,然后将后面的元素向前移动来覆盖重复的元素。然而,在移动元素之后,数组的长度也发生了变化,而循环的范围仍然是基于最初的数组长度计算的,所以可能会漏掉一些重复元素或者操作超出数组边界。

    为了解决这个问题,我建议使用一个指针来记录当前非重复元素的位置,然后遍历数组,如果当前元素与指针指向的元素不相等,则将当前元素赋值给指针指向的下一个位置,并将指针向前移动一位。这样做可以保证指针之前的元素都是非重复的,而指针之后的元素可以被忽略,最后返回指针的位置加一即可得到非重复元素个数。

    下面是修改后的代码示例:

    nums = [1,2,2,5,6,7]
    n = len(nums)
    
    if n == 0:
        expectedNums = 0
    else:
        pointer = 0
        for i in range(1, n):
            if nums[pointer] != nums[i]:
                pointer += 1
                nums[pointer] = nums[i]
    
        expectedNums = pointer + 1
    

    这样修改后的代码可以在O(n)的时间复杂度内完成删除重复项的操作,并且能够正确地删除有序数组中的重复元素。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月15日
  • 已采纳回答 9月7日
  • 修改了问题 9月4日
  • 创建了问题 9月4日

悬赏问题

  • ¥15 关于#c语言#的问题,请各位专家解答!
  • ¥15 这个如何解决详细步骤
  • ¥15 在微信h5支付申请中,别人给钱就能用我的软件,这个的所属行业是啥?
  • ¥30 靶向捕获探针设计软件包
  • ¥15 别人给钱就能用我的软件,这个的经营场景是啥?
  • ¥15 react-diff-viewer组件,如何解决数据量过大卡顿问题
  • ¥20 遥感植被物候指数空间分布图制作
  • ¥15 安装了xlrd库但是import不了…
  • ¥20 Github上传代码没有contribution和activity记录
  • ¥20 SNETCracker