zoukankan      html  css  js  c++  java
  • 使用散列表来降低时间复杂度

    题目描述

    在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。
     
     1 /*
     2      *思路:
     3      *查找数组中重复的数字:
     4      *这题有明确定义数组中的数字大小不超过数组的长度并且大于0,所以可以用散列表来做,这样应该不会内存越界 
     5      *
     6      *位图:
     7      *即申请一个数组长度的位图数组,并初始化为0,正好可以以数组的下标作为每个数字的索引,然后位图数组的值作为该索引位置数字出现的次数.
     8      *最后扫一遍位图数组,找到第一个值大于1的即可.
     9      *
    10      *可以用java的数据结构HashMap做,不过就没什么意思了,都没有用到题目的特性.
    11      *编程就是应该特殊情况考虑特殊的数据结构.
    12      */
    13 
    14     public boolean duplicate(int numbers[],int length,int [] duplication) 
    15     {
    16         if(length <= 1)
    17         {
    18             return false;
    19         }
    20         
    21         int bitMapNumber[] = new int[length];
    22         
    23         for(int i = 0; i < length; i++)
    24         {
    25             bitMapNumber[i] = 0;
    26         }
    27         
    28         for(int i = 0; i < length; i++)
    29         {
    30             bitMapNumber[numbers[i]]++;
    31         }
    32         
    33         for(int i = 0; i < length; i++)
    34         {
    35             
    36             if(bitMapNumber[i] > 1)
    37             {
    38                 duplication[0] = i;
    39                 
    40                 return true;
    41             }
    42             
    43         }
    44         
    45         return false;
    46     }
  • 相关阅读:
    PL/SQL Developer使用技巧、快捷键(转发)
    Java 获取随机日期
    jsonArray和Java List对象互转,日期处理
    ExtJs grid单选,多选
    ExtJs 下拉单联动,次级下拉框查询模式
    ExtJs 日期相加,Grid表格列可编辑
    转:Java阳历转农历
    转:Java 计算2个时间相差多少年,多少个月,多少天的几种方式
    钥匙计数之一
    LianLianKan
  • 原文地址:https://www.cnblogs.com/daimadebanyungong/p/5024343.html
Copyright © 2011-2022 走看看