码迷,mamicode.com
首页 > 编程语言 > 详细

剑指offer系列24---数组中重复的数字

时间:2016-05-27 14:29:34      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:

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

书上方法:

 1 package com.exe6.offer;
 2 /**
 3  * 【24】
 4  * 【题目】在一个长度为n的数组里的所有数字都在0到n-1的范围内。
 5  *  数组中某些数字是重复的,但不知道有几个数字是重复的。
 6  *  也不知道每个数字重复几次。
 7  * 请找出数组中任意一个重复的数字。 
 8  * 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。
 9  * @author WGS
10  *
11  */
12 public class DuplicationNums {
13 
14     @SuppressWarnings("unused")
15     public  boolean DuplicationNums(int[] nums){
16         if(nums==null ||nums.length <=0) return false;
17         int len=nums.length;
18         for(int i=0;i<len;i++){
19             if(nums[i]>=len){
20                 System.out.println("输入的数不符合要求!");
21                 return false;
22             }
23         }
24         
25         for(int i=0;i<len;i++){
26             while(nums[i]!=i){
27                 if(nums[i]==nums[nums[i]]){
28                     
29                     return true;
30                 }else{
31                     int temp=nums[i];//2
32                     nums[i]=nums[nums[i]];//1
33                     nums[temp]=temp;
34                 }
35             }
36         }
37         return false;
38     }
39     public static void main(String[] args) {
40         int numbers[]=new int[]{2,3,1,0,2,5,3};
41         DuplicationNums d=new DuplicationNums();
42         boolean b=d.DuplicationNums(numbers);
43         System.out.println(b);
44     }
45 
46 }

博主代码,可以显示指定数字重复的次数:

 1 package com.exe6.offer;
 2 
 3 import java.util.HashMap;
 4 import java.util.Map;
 5 
 6 /**
 7  * 【24】
 8  * 【题目】在一个长度为n的数组里的所有数字都在0到n-1的范围内。
 9  *  数组中某些数字是重复的,但不知道有几个数字是重复的。
10  *  也不知道每个数字重复几次。
11  * 请找出数组中任意一个重复的数字。 
12  * 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。
13  * @author WGS
14  *
15  */
16 public class DuplicationNums2 {
17 
18 
19     public  boolean DuplicationNums2(int[] nums,int [] duplication){
20         if(nums==null ||nums.length <=1) return false;
21         int len=nums.length;
22         
23         
24         for(int i=0;i<len;i++){
25             if(nums[i]>=len){
26                 System.out.println("输入的数不符合要求!");
27                 return false;
28             }
29         }
30         Map<Integer,Integer> counter=new HashMap<>();
31         for(int i=0;i<len;i++){
32             while(nums[i]!=i){
33                 if(counter.containsKey(nums[i])){
34                     duplication[0]=nums[i];
35                     return true;
36                 }else{
37                     counter.put(nums[i], new Integer(1));
38                 }
39             }
40         }
41         return false;
42     }
43     
44     public static void main(String[] args) {
45         int numbers[]=new int[]{2,3,1,0,2,5,3};
46         DuplicationNums2 d=new DuplicationNums2();
47         boolean b=d.DuplicationNums2(numbers,new int[1]);
48         System.out.println(b);
49     }
50 
51 }

 

剑指offer系列24---数组中重复的数字

标签:

原文地址:http://www.cnblogs.com/noaman/p/5534308.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!