数组中重复的数字

原创 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;
    }



相关文章推荐

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

class Solution { public:     // Parameters:     //        numbers:     an array of integers     ...

数组中重复的数字(n个数字,且数字都在0到n-1范围内)

思路:从头到尾扫描数组每个数字,当扫描到下标为i的数字m时,首先比较m是不是等于i,如果是,继续扫描;如果不是,再拿m和第m个数字进行比较。如果他们相等,就找到第一个重复数字,如果不相等,交换两者位置...

一个大小为n的数组,里面的数都属于范围[0, n-1],有不确定的重复元素,找到至少一个重复元素,要求O(1)空间和O(n)时间。

这个题目要求用O(n)的时间复杂度,这意味着只能遍历数组一次。同时还要寻找重复元素,很容易想到建立哈希表来完成,遍历数组时将每个元素映射到哈希表中,如果哈希表中已经存在这个元素则说明这就是个重复元素。...

剑指offer-面试题51:数组中重复的数字

题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字...

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

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

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

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

数组中重复的数字

在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{...

数组中重复的数字

/* *在一个长度为n的数组里的所有数字都在0到n-1的范围内。 *数组中某些数字是重复的,但不知道有几个数字是重复的。 *也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 *例如,如果...

面试题3:数组中重复的数字

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

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

题目 给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。 不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。 您在真实的面试中是否遇到...
  • fly_yr
  • fly_yr
  • 2016年05月31日 20:10
  • 5321
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数组中重复的数字
举报原因:
原因补充:

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