题目一:找出数组中的重复数字
在一个长度为n的数组里所有数字都在0~n-1的范围内,数组中某些数字是重复的,但不知道有几个数字重复,也不知道有几个数字重复几次,请找出任意一个重复的数字。例如:输入长度为7的数字组{2,3,1,0,2,5,3},对应的输出是2或3
解法一:
对数组进行排序,从头到尾扫面数组即可
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class RepeatNumber {
public List<Integer> getRepeatNumber(int arr[]){
Arrays.sort(arr);
ArrayList<Integer> list = new ArrayList<>();
for(int i = 1;i < arr.length;i++){
if(arr[i-1]==arr[i])
list.add(arr[i]);
}
return list;
}
}
测试类:
import sun.applet.Main;
import java.util.List;
public class test {
public static void main(String[] args) {
int[] ints = {2,3,1,0,4,5,8};
RepeatNumber repeatNumber = new RepeatNumber();
List<Integer> number = repeatNumber.getRepeatNumber(ints);
System.out.println(number);
}
}
/*
"C:\Program Files\Java\jdk1.8.0_191\bin\java.exe" "-javaagent:E:\idea\IntelliJ IDEA
[]
Process finished with exit code 0
*/
import sun.applet.Main;
import java.util.List;
public class test {
public static void main(String[] args) {
int[] ints = {2,3,1,0,2,5,3};
RepeatNumber repeatNumber = new RepeatNumber();
List<Integer> number = repeatNumber.getRepeatNumber(ints);
System.out.println(number);
}
}
/*
"C:\Program Files\Java\jdk1.8.0_191\bin\java.exe" "-javaagent:E:\idea\IntelliJ IDEA
[2, 3]
Process finished with exit code 0
*/
题目二:要求不改变原有数组顺序
import java.util.ArrayList;
import java.util.List;
/*
* 需求:不能修改原数组
* */
public class RepeatNumber2 {
public List<Integer> getRepeatNumber(int arr[]){
int arrLength=arr.length;
//初始化辅助数组 并将值赋为-1
int[] arr1 = new int[arrLength];
for(int i = 0;i<arr1.length;i++){
arr1[i]=-1;
}
ArrayList<Integer> list = new ArrayList<>();
for(int i=0;i < arr.length;i++){
if(arr1[arr[i]] == -1){
arr1[arr[i]]=arr[i];
}else{
list.add(arr[i]);
}
}
return list;
}
}
测试:
import sun.applet.Main;
import java.util.Arrays;
import java.util.List;
public class test1 {
public static void main(String[] args) {
int[] ints = {2,3,5,4,3,2,6,7};
RepeatNumber2 repeatNumber = new RepeatNumber2();
List<Integer> number = repeatNumber.getRepeatNumber(ints);
System.out.println(Arrays.toString(ints));
System.out.println(number);
}
}
/*
*"C:\Program Files\Java\jdk1.8.0_191\bin\java.exe" "-javaagent:E:\idea\IntelliJ IDEA
[2, 3, 5, 4, 3, 2, 6, 7]
[3, 2]
*/