给定一个int数组,写一个函数判断该数组中的所有数字是否能组成连续数字。如[1,3,4,6,2,5]能组成连续数字,【1,2,5,4,7】不能。数组中的数也可能重复
方法一:
先用一个循环找出数字中的最大值和最小值,然后从最小到最大值在数组中循环查找对应数字,只要有一个数没有找到,就返回false,如果都找到了,就返回true.
public boolean isContinousArray(int[] intArr)
{
if(intArr==null) return false;
if(intArr.length<2) return true;
int maxInt=intArr[0],minInt=intArr[0];
for(int i:intArr)
{
System.out.println(i);
if(i>maxInt) maxInt=i;
if(i<minInt) minInt=i;
}
for(int value=minInt;value<=maxInt;value++)
{
boolean found=false;
for(int j:intArr)
{
if(j==value)
{
found=true;
break;
}
}
if(!found) return false;
}
return true;
}
方法二:
先排序,然后前一个数等于后一个数或者前一个数+1等于后一个数
int[] a = new int[]{1,3,6,4,5,2,3};
int[] b = new int[]{5,4,6,5,3,1};
Arrays.sort(a);
Arrays.sort(b);
check(a,"a[1,3,6,4,5,2,3]");
check(b,"b[5,4,6,5,3,1]");
public void check(int[] nums,String str){
for(int i=0;i<nums.length-1;i++){
if(nums[i+1]-nums[i] != 1 && nums[i] != nums[i+1]){
System.out.println(str+"不连续...");
break;
}
}
}
结果:
b[5,4,6,5,3,1]不连续...