AcWing
  • 首页
  • 活动
  • 题库
  • 竞赛
  • 更多
    • 题解
    • 分享
    • 问答
    • 应用
  • App
  • 教育优惠
    New
  • 登录/注册

AcWing 14. 不修改数组找出重复的数字-Python3    原题链接    简单

作者: 作者的头像   唐毓阳的小迷弟 ,  2022-08-23 23:52:46 ,  所有人可见 ,  阅读 358


3


算法

(整数二分模板) $O(nlogn)$

按数组里数的大小进行二分而不是数的下标
把区间划分为[l,mid],[mid+1,r]
统计左半边个数,如果大于区间长度说明有重复元素,将区间更新为[l,mid],反之更新为[mid+1,r]

Python3 代码

class Solution(object):
    def duplicateInArray(self, nums):
        """
        :type nums: List[int]
        :rtype int
        """
        l = 1
        r = len(nums) - 1
        while l < r:
            mid = l + r >> 1
            # 统计左半边数的个数
            s = 0
            for i in nums:
                if l <= i <= mid:
                    s += 1
            if s > mid - l + 1:  # 区间长度
                r = mid
            else:
                l = mid + 1
        return l

0 评论

你确定删除吗?

© 2018-2023 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息