面试考到的一个问题

Code:
  1. /**  
  2.  * 给定一个int数组,写一个函数判断该数组中的所有数字是否能组成连续数字。  
  3.  * 如[1,3,4,6,2,5]能组成连续数字,【1,2,5,4,7】不能。数组中的数也可能重复.  
  4.  *   
  5.  * @author Administrator 2010-5-29  
  6.  */  
  7. public static boolean isContinousArray1(int[] intArr) {   
  8.         if (intArr == null)   
  9.             return false;   
  10.         if (intArr.length < 2)   
  11.             return true;   
  12.         int maxInt = intArr[0], minInt = intArr[0];   
  13.         for (int i : intArr) {   
  14.             if (i > maxInt)   
  15.                 maxInt = i;   
  16.             if (i < minInt)   
  17.                 minInt = i;   
  18.         }   
  19.         for (int value = minInt; value <= maxInt; value++) {   
  20.             boolean found = false;   
  21.             for (int j : intArr) {   
  22.                 if (j == value) {   
  23.                     found = true;   
  24.                     break;   
  25.                 }   
  26.             }   
  27.             if (!found)   
  28.                 return false;   
  29.         }   
  30.         return true;   
  31.     }   
  32.   
  33.     public static void isContinousArray2(int[] arr) {   
  34.         Map<Integer, Integer> map = new TreeMap<Integer, Integer>();   
  35.         for (int i : arr) {   
  36.             map.put(i, (i - 1));   
  37.         }   
  38.         boolean firstIsNull = true;   
  39.         for (int i : map.keySet()) {   
  40.             if (map.get(map.get(i)) != null) {   
  41.                 System.out.println("能组成连续数字.");   
  42.                 continue;   
  43.             } else if (firstIsNull) {   
  44.                 firstIsNull = false;   
  45.             } else {   
  46.                 System.out.println("不能组成连续数字.");   
  47.                 
  48.                 break;   
  49.             }   
  50.         }   
  51.     }  

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值