数组中重复的数字

原创 2016年08月30日 10:05:44

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

思路:用哈希表解决的时间复杂度和空间复杂度为O(n)。因为数组中的数字都在0到n-1的范围内,我们可以重排这个数组。从头到尾扫描这个数组中的每个数字,当下标为i时,比较这个数字(m)是不是等于i,如果是,接着扫描下一个数字。如果不是,再拿它和第m个数字比较,如果它和第m个数字相等,就找到了一个重复的数字(该数字在下标为i和m的位置都出现了);如果它和第m个数字不相等,就把第i个数字和第m个数字交换,把m放到属于它的位置。接着重复这个比较、交换。

 public boolean duplicate(int numbers[],int length,int [] duplication) {
         if(numbers == null || length <= 0){
    		return false;
    	}
    	for(int i=0;i<length;i++){
    		if(numbers[i] < 0 || numbers[i] > length-1){
    			return false;
    		}
    	}
    	for(int j=0;j<length;j++){
    		while(numbers[j] != j){
    			if(numbers[j] == numbers[numbers[j]]){
    				int i = 0;
    				duplication[i++] = numbers[j];
    				return true;
    			}
    			int temp = numbers[j];
    			numbers[j] = numbers[temp];
    			numbers[temp] = temp;
    		}
    	}
    	return false;
    }



[剑指Offer]数组中重复的数字

题目描述: 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度...
  • shakespeare001
  • shakespeare001
  • 2016年04月26日 17:20
  • 1582

数组中重复的数字(Java实现)

本题为剑指offer面试题51 牛客网测试地址:https://www.nowcoder.com/questionTerminal/623a5ac0ea5b4e5f95552655361ae...
  • zjkC050818
  • zjkC050818
  • 2017年05月29日 10:03
  • 990

LintCode(100)删除排序数组中的重复数字

题目 给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。 不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。 您在真实的面试中是否遇到...
  • fly_yr
  • fly_yr
  • 2016年05月31日 20:10
  • 5936

剑指offer——数组中重复的数字

问题描述:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为...
  • sbq63683210
  • sbq63683210
  • 2016年07月20日 16:03
  • 359

LintCode(101)删除排序数组中的重复数字 II

题目 跟进“删除重复数字”: 如果可以允许出现两次重复将如何处理? 您在真实的面试中是否遇到过这个题?  Yes 样例 给出数组A =[...
  • fly_yr
  • fly_yr
  • 2016年05月31日 20:24
  • 3840

【LintCode】删除排序数组中的重复数字

删除排序数组中的重复数字  描述: 给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。 不要使用额外的数组空间,必须在原地没有额外空间的条件...
  • a417484830
  • a417484830
  • 2017年06月09日 21:11
  • 185

算法面试题之不修改数组找出重复的数字

算法面试题之不修改数组找出重复的数字
  • yz930618
  • yz930618
  • 2017年07月25日 11:00
  • 721

剑指Offer面试题51(Java版):数组中重复的数字

题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复的次数。请找出数组中任意一个重复的数字。 例如如果输入长度为7的数...
  • jsqfengbao
  • jsqfengbao
  • 2015年08月12日 08:36
  • 3898

删除排序数组中的重复数字——LintCode

删除排序数组中的重复数字 给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。 不要使用额外的数组空间,必须在原地没有额外空间的...
  • fk5431
  • fk5431
  • 2015年12月10日 19:39
  • 1023

LintCode 删除排序数组中的重复数字 II

删除排序数组中的重复数字 II跟进删除排序数组中的重复数字: 如果可以允许出现两次重复将如何处理? 样例 给出数组A =[1,1,1,2,2,3],你的函数应该返回长度5,此时A=[1,1,2,...
  • shinanhualiu
  • shinanhualiu
  • 2015年10月03日 15:09
  • 1380
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数组中重复的数字
举报原因:
原因补充:

(最多只允许输入30个字)