Java 剑指offer 面试题3:数组中的重复数字

题目一:找出数组中的重复数字

在一个长度为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]

*/

猜你喜欢

转载自blog.csdn.net/weixin_43014205/article/details/85337315