首页 > 编程语言 >剑指offer面试题3:数组中重复的数字(Python实现)

剑指offer面试题3:数组中重复的数字(Python实现)

时间:2025-01-20 17:28:19浏览次数:3  
标签:面试题 right offer Python mid int length numbers left

"""
面试题3:数组中重复的数字
在一个长度为n的数组里所有数字都在0~n-1的范围内,某些数字是重复的,找出任意一个重复的数字
"""


def duplicate1(numbers: list, length: int) -> int:
    """
    修改原数组
    """
    if numbers == [] or length <= 0:
        return -1

    for i in range(length):
        while numbers[i] != i:
            if numbers[numbers[i]] == numbers[i]:
                return numbers[i]
            else:
                temp = numbers[i]
                numbers[i] = numbers[temp]
                numbers[temp] = temp
    return -1


def duplicate2(numbers: list, length: int) -> int:
    """
    不修改原数组
    """
    if (numbers == [] or length <= 0):
        return -1

    left = 0
    right = length - 1
    while(right >= left):
        mid = left + (right - left) // 2
        count = countRange(numbers, length, left, mid)
        if(right == left):
            if(count > 1):
                return left
            else:
                break
        if(count > (mid - left + 1)):
            right = mid
        else:
            left = mid + 1
    return -1


def countRange(numbers: list, length: int, left: int, right: int) -> int:
    if(numbers == []):
        return 0

    count = 0
    for i in range(length):
        if(numbers[i] >= left and numbers[i] <= right):
            count += 1
    return count


if __name__ == '__main__':
    numbers_list = [2, 3, 1, 0, 2, 5, 3]
    print('改变数组:')
    print(duplicate1(numbers_list, len(numbers_list)))
    print('##############')
    print('不改变数组:')
    print(duplicate2(numbers_list, len(numbers_list)))

标签:面试题,right,offer,Python,mid,int,length,numbers,left
From: https://blog.csdn.net/one_bad_day/article/details/145266426

相关文章

  • (2024最新毕设合集)基于SpringBoot的游乐园管理系统-69394|可做计算机毕业设计JAVA、PHP
    目录1绪论1.1选题背景与意义1.2国内外研究现状1.3论文结构与章节安排2系统分析2.1可行性分析2.1.1经济可行性2.1.2技术可行性2.1.3操作可行性2.2系统流程分析2.2.1系统开发流程2.2.2用户登录流程2.2.3系统操作流程2.2.4添加信息流程2.2.5......
  • Python Playwright学习笔记(二)
    一、模拟手机playwright.devices可以配置模拟器。importasynciofromplaywright.async_apiimportasync_playwrightasyncdefrun(playwright):iphone_12=playwright.devices['iPhone12']browser=awaitplaywright.webkit.launch(headless=False)conte......
  • python import 思考二
    前言思考一中简单介绍了import导入模块时的检索机制然而在实际的导入时,我们经常会导入失败,尤其是在相对导入时。下面就绝对导入和相对导入时发生的一些问题进行记录和思考文件目录结构my_project/|--package1/| |--subpackage1/| | |--module2.py| |--module......
  • 面试题-redis的大key与热key
    题目概览:什么是Redis的大key,多大的键值才算是大key,大key是如何产生的呢?大key会造成什么问题,如何排查以及如何优化?Redis的大Key被发现后如何删除,删除的时候会存在什么难点?说说看Redis的热key吗,热key会造成什么问题,如何解决?1、什么是Redis的大key,多大的键值才算是大key,......
  • 大华大数据开发面试题及参考答案
    Java的JDK和JRE有什么区别?JDK(JavaDevelopmentKit):即Java开发工具包,是Java开发人员用于开发Java程序的工具集。它包含了JRE和一系列开发工具。JDK提供了编译、调试和运行Java程序所需的所有工具和资源,比如编译器javac、调试器jdb等。如果要开发Java应用......
  • Python进阶:深入理解import机制与importlib的妙用
    目录一、Pythonimport机制概述1.1import语句的基本用法1.2模块缓存机制1.3导入搜索路径1.4导入钩子和查找器二、importlib的妙用2.1动态模块导入2.2使用importlib实现插件系统2.3重新加载模块三、总结在Python编程的世界里,import语句是开发者最常用的工......
  • Python识别处理验证码技术详解
    目录一、验证码的种类二、OCR技术简介三、使用OCR技术识别验证码1.安装所需库2.下载和处理验证码图片3.使用OCR进行识别4.完整代码示例四、处理复杂验证码五、案例:识别古诗文网验证码六、总结验证码作为一种常见的安全手段,广泛应用于各种网站和应用中,以防止......
  • 【大模型面试】常见问题及答案,一文搞定面试准备!2025年大模型最新最全面试题,助你吊打面
    大模型相关的面试问题通常涉及模型的原理、应用、优化以及面试者对于该领域的理解和经验。以下是一些常见的大模型面试问题以及建议的回答方式:请简述什么是大模型,以及它与传统模型的主要区别是什么?回答:大模型通常指的是参数数量巨大的深度学习模型,如GPT系列。它们与传统模......
  • Python 列表推导和生成器表达式的区别点
    列表推导(ListComprehensions)和生成器表达式(GeneratorExpressions)在Python中有着相似的语法,但它们的行为和用途有所不同。以下是两者之间的主要区别:1.内存使用列表推导:创建一个完整的列表,所有元素都会被立即计算并存储在内存中。squares_list=[x**2forxinrange(1......
  • Python 实战-优化排班表节省成本
    1.基础概念:理解排班表排班表,顾名思义,就是安排员工工作时间的表格。在餐馆中,它通常需要考虑员工的可用性、工作时间限制、用餐高峰时段等因素。2.使用列表存储员工信息首先,我们需要一个数据结构来存储员工信息。Python中的列表是一个不错的选择。#员工信息列表,包括姓名、......