zoukankan      html  css  js  c++  java
  • 找数组中重复的数

    任何数组中找重复的数:

    1.都可以通过快速排序(或者过程中就判断是否重复)后,再遍历一遍的计数的方式找到所有。时间复杂度是O(n*log(n));空间复杂度是O(1);

    2.都可以通过借助map查询一遍值作为key,出现次数作为value计数,再遍历一遍计数结果的方式实现。时间复杂度是O(n),但是需要额外的空间复杂度O(n);

    一.给定范围的数值重复找出

    (1)1-n放在有n+1个元素的数组中,只有唯一的一个元素值重复,其它均只出现一次。求重复的数。

    1. sum(arr,n+1) - (1+2+3+..+n)

    2.^arr^(1^2^3^...^n)  /*利用a^a=0,0^a=a*/

    (2)在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。

    思路是这样的:
    如果是不重复的数组,那么,使之有序之后下标和数是一样的。那么利用这个性质,把数和下标不同的数换到对应位置!当交换的两个数相同的时候,说明有重复数字,记录并返回!

    eg:初始状态: {2,3,6,1,5,2,3}

    一次交换后: {6,3,2,1,5,2,3}

    两次交换后: {3,3,2,1,5,2,6}  

    三次交换后: {1,3,2,3,5,2,6}        

    四次交换后: {3,1,2,3,5,2,6}     

    五次交换后: {3,1,2,3,5,2,6}       重复了!

     二.无给定范围的数值重复找出

    (1)给定一个数组,里面只有一个数出现了1次,其他都出现了2次,怎么得到这个出现了1次的数。

      数组数值异或结果即为所求。

    (2)

  • 相关阅读:
    Qt程序使用Win32 API发送ZPL指令与斑马打印机通信
    Eclipse构建Maven项目
    编码风格 缩进和空白
    Linux下Tomcat重新启动
    linux下tomcat服务的相关命令
    第一天
    Day1NLP_机器翻译
    Day4_attention is all you need 论文阅读下篇
    Day_7tensorflow 实战
    Day5_python学习
  • 原文地址:https://www.cnblogs.com/shijianchuzhenzhi/p/12508488.html
Copyright © 2011-2022 走看看