我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python不修改数组怎么找出重复的数字

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python不修改数组怎么找出重复的数字

这篇“Python不修改数组怎么找出重复的数字”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python不修改数组怎么找出重复的数字”文章吧。

    数组中重复的数字

    在上一篇博客中剑指Offer之面试题3: 数组中重复的数字中,其实能发现这类题目的关键就是一边遍历数组一边查满足条件的元素。

    然后我们在博客用最复杂的方式学会数组(Python实现动态数组)这篇博客中介绍了数组这一结构的本质,并自己动手实现了一个动态数组。

    今天我们介绍一下另一道来自《剑指Offer》的关于数组的面试题——不修改数组找出重复的数字。

    不修改数组找出重复的数字

    题目二:不修改数组找出重复的数字

    给定一个长度为 n+1 的数组里的所有数字都在 0∼n 的范围内,所以数组中至少有一个数字是重复的。

    请找出数组中任意一个重复的数字,但不能修改输入的数组。

    样例:

    给定长度为8的数组 nums = [2, 3, 5, 4,3, 2, 6,7]

    那么输出重复的数字2或者3

    思路

    首先我们得关注到,题目要求是:不修改数组,然后还是  返回任意一个重复的数字 。所以解题思路相比而言变少了:

    哈希表:跟上一题一样,本题也可以创建一个哈希表,如果原数组的每个数字第一次出现,就把他放到哈希表中去,即原数组大小为m的数字应该放到哈希表下标为m的位置上。空间复杂度是 $O(n)$ 。

    二分法:那么有没有不用空间复杂度 $O(n)$ 的算法。假设没有重复数,那么1~n 之间,每个数都只能出现一次。而题目中,这个数组至少有一个数字重复,即出现的次数大于1。

    利用二分的思想:把 1~n 的数字从中间数字 m 开始分为两部分,前一半为 1~ m,后面一半为 m+1 ~n,如果 1~m 中的数字在数组中出现的次数大于 m,那么这一半必定有重复的数字;

    否则,那么另一部分必定含有重复数字。接着我们,继续对含有重复数字的区间一分为二,直到找到重复的数字。

    思路一:哈希表

    def find_duplicated_num(nums):    """hash_map"""    hash_map = dict()    for i, val in enumerate(nums):        if val in hash_map:            return val        hash_map[val] = i    return False

    思路二:二分法

    def reduce_inter(nums2, left, right):    """ """    mid = (left + right) // 2    count = 0    length = len(nums2)    for i in range(length):        if (nums2[i] >= left) and (nums2[i] <= mid):            count += 1    if count > mid - left + 1:        return left, mid    else:        return mid+1, rightdef find_duplicated_num2(nums2):    left, right = 1, len(nums2) - 1    while left != right:        left, right = reduce_inter(nums2, left, right)    return left

    测试

    nums = [2, 3, 5, 4, 3, 2, 6, 7]# nums_n = [5, 4, 3, 2, 6, 7]print("思路一测试结果: ", find_duplicated_num(nums))print("思路二测试结果: ", find_duplicated_num2(nums))

    结果

    思路一测试结果:  3
    思路二测试结果:  3

    以上就是关于“Python不修改数组怎么找出重复的数字”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    Python不修改数组怎么找出重复的数字

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    Python不修改数组怎么找出重复的数字

    这篇“Python不修改数组怎么找出重复的数字”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python不修改数组怎么找出重
    2023-06-30

    java如何找出数组中的不重复数字

    找出数组中不重复的一个数字,题目大致是这样的:int[] a = { 1, 2, 3, 4, 3, 2, 1 };在线视频教程推荐:java在线学习解决办法是:public static int getNoRepeat() {int[] a = { 1, 2,
    java如何找出数组中的不重复数字
    2018-07-23

    c语言怎么找出数组中重复的数字

    可以使用两种方法来找出数组中重复的数字。方法一:使用“哈希表”创建一个哈希表,用于记录每个数字出现的次数。遍历数组,将数组中的每个数字作为键,放入哈希表中,并将对应的值加1。遍历哈希表,找出值大于1的键,即为重复的数字。示例代码如下:
    2023-10-26

    JavaScript怎么找出数组中的重复或非重复元素

    本文小编为大家详细介绍“JavaScript怎么找出数组中的重复或非重复元素”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript怎么找出数组中的重复或非重复元素”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习
    2023-06-29

    python怎么找出字符串的重复字符

    可以使用Python的set()函数来找出字符串中的重复字符。set()函数会将字符串转换成一个集合,集合中的元素是唯一的。我们可以将字符串转换成集合后,再用循环遍历集合中的元素,在原字符串中统计该元素出现的次数,如果次数大于1,则说明该字
    2023-10-11

    sql怎么找出重复的数据

    要找出重复的数据,可以使用SQL语句中的GROUP BY和HAVING子句。下面是一个示例,假设有一个名为employees的表,它包含了员工的信息,包括员工ID和姓名。要找出重复的姓名,可以使用以下SQL语句:SELECT 姓名, C
    2023-10-22

    4个数字组成不重复的3位数python脚

    4个数字组成不重复的3位数python脚本:注:1、range(1,5),1-4不包括52、if and判断3、变量中间用“,”隔开,输出时中间为空格#!/usr/bin/pythonfor i in range(1,5):for j i
    2023-01-31

    php中怎么找出数组中重复率最高的值

    php中怎么找出数组中重复率最高的值,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。我们来看看下面一个例子。
    2023-06-20

    怎么使用Python pandas找出删除重复的数据

    这篇文章主要介绍了怎么使用Python pandas找出删除重复的数据的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用Python pandas找出删除重复的数据文章都会有所收获,下面我们一起来看看吧。前
    2023-07-02

    mysql怎么查找重复字段的数据

    要查找重复字段的数据,可以使用如下的SQL查询语句:SELECT field_name, COUNT(field_name) as countFROM table_nameGROUP BY field_nameHAVING COUN
    mysql怎么查找重复字段的数据
    2024-04-09

    python怎么找出只出现一次的数字

    可以通过使用Counter函数来统计数字出现的次数,然后遍历统计结果,找出出现次数为1的数字。以下是一个示例代码:```pythonfrom collections import Counterdef find_single_number(
    2023-09-29

    Java/Python怎么找出无重复字符的最长子串

    这篇文章主要讲解了“Java/Python怎么找出无重复字符的最长子串”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java/Python怎么找出无重复字符的最长子串”吧!题目:给定一个字符
    2023-06-02

    python怎么找出列表中相同的数字

    要找出列表中相同的数字,可以使用循环和条件判断来比较列表中的每个元素。以下是一个示例代码,演示如何找出列表中相同的数字:```pythondef find_duplicates(lst):duplicates = []for i in ls
    2023-09-26

    php怎么提取数组中不重复的值

    提取步骤:1、利用array_count_values()函数统计数组中元素的出现次数,语法“array_count_values(原数组)”,会返回一个关联数组,其元素的键名是原数组的值,键值是该值在原数组中出现的次数;2、利用array_keys()函数获取出现次数为1的元素,即提取关联数组中键值为1的元素的键名即可,语法“array_keys(关联数组,1)”。本教程操作环境:windows7
    2022-07-13

    java怎么消除数组中重复出现的值

    可以使用Set来消除数组中重复出现的值。Set是一个不允许有重复元素的集合,可以用来存储数组中的元素,然后再将Set转换回数组。以下是一个示例代码:javaimport java.util.Arrays;import java.util.H
    2023-10-20

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录