冒泡排序寻找一维数组中任意重复的数字
题目一1.在一个长度为n的数组,数组中的数字0~n-1范围,找出任意一个重复的数字。
// An highlighted block
import java.util.Arrays;
public class RepeatNum {
/**
* 冒泡排序-思想-两两比较大小,从小到大排列
* 找重复数字,排序好后,比较相邻两个数字是否相等
* @param arr
*/
public static void find(int []arr){
//判断参数合法性
if(arr == null||arr.length == 0){
return ;
}
//控制趟数
for(int j=0;j<arr.length-1;j++) {
//一趟冒泡排序
for (int i = 0; i < arr.length - 1-j; i++) {
//-j数组下标不会越界
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
}
}
public static int repeatNum(int[] arr){
//判断参数合法性
if(arr==null||arr.length==0){
return Integer.MAX_VALUE;//返回整形值,可以这样
}
//题目要求所有数字在0~n-1范围内
for(int i=0;i<arr.length;i++) {
if (arr[i]<0||arr[i]>arr.length-1){
return Integer.MAX_VALUE;
}
}
//排序
find(arr);
System.out.println(Arrays.toString(arr));
for(int j=0;j<arr.length-1;j++) {
//j+1不能越界,所以arr.length-1
if (arr[j] == arr[j + 1]) {
return arr[j];
}
}
return Integer.MAX_VALUE;
}
public static void main(String[] args){
int [] arr = {
0,1,2,5,6,4,3,3};
System.out.println(repeatNum(arr));
}
}