找出数组中重复数字问题
给定一个长度是n的数组,数组中的所有数字是从0~n之间的。找出数组中的重复数字。
例如[1,1,2,3,4,3],输出的重复数字是1,3.
**解法一:**对数组进行排序,然后判断数组中重复数字的方法就是i与i+1之间是否相同,并且注意判断最后一个元素的值,使用快速排序。
import java.util.Arrays;
public class test1 {
public static void main(String[] args) {
int[] arr = {23,46,0,8,11,18,2,5,3,5,1,2,3,5};
System.out.println("未排序的数组:"+Arrays.toString(arr));
quickSort(arr,0,arr.length-1);
System.out.println("排序之后的数组:"+Arrays.toString(arr));
//找到数组中的重复元素
getRepeatedNum(arr);
}
public static void getRepeatedNum(int[] arr){
for(int i=0;i<arr.length;i++){
if(i==arr.length-1){
break;
}
if(arr[i]==arr[i+1]){
System.out.println(arr[i]);
i=i+1;//如果找到这个数字,后面的数字不需要比较
}
}
}
public static void quickSort(int arr[],int start,int end){
if(start<end){
int low = start;
int high = end;
int stand = arr[start]; //选取标准数
while(low<high){
//从数组的末尾开始处理
while(low<high&&stand<=arr[high]){
high--;
}
arr[low] = arr[high];
//从数组的开始进行处理
while(low<high&&stand>=arr[low]){
low++;
}
arr[high] = arr[low];
}
//将标准数放到应该放在的位置
arr[low] = stand;
quickSort(arr,start,low);
quickSort(arr,low+1,end);
}
}
}
后面两种方法见下篇博客。