题目描述
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,
但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。
例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。
解题思路:
第一个重复的数字即可;
采用list.contains进行判断,如果存在,证明就是重复的,直接进行赋值,然后进行返回。
- package pratice718;
- import java.util.ArrayList;
- //题目描述
- //在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,
- //但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。
- //例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。
- //解题思路:
- //第一个重复的数字即可;
- //采用list.contains进行判断,如果存在,证明就是重复的,直接进行赋值,然后进行返回。
- public class repateNum_onerept {
- // Parameters:
- // numbers: an array of integers
- // length: the length of array numbers
- // duplication: (Output) the duplicated number in the array number,length of duplication array is 1,so using duplication[0] = ? in implementation;
- // Here duplication like pointor in C/C++, duplication[0] equal *duplication in C/C++
- // 这里要特别注意~返回任意重复的一个,赋值duplication[0]
- // Return value: true if the input is valid, and there are some duplications in the array number
- // otherwise false
- public static boolean duplicate(int numbers[],int length,int [] duplication) {
- ArrayList<String> list = new ArrayList<String>();
- if(numbers==null || numbers.length==0)
- return false;
- list.add(numbers[0]+"");
- for(int i=1;i<numbers.length;i++)
- {
- if(list.contains(numbers[i]+"")){
- list.remove(numbers[i]+"");
- duplication[0] = numbers[i];
- return true;
- }else{
- list.add(numbers[i]+"");
- }
- }
- for(int i=0;i<list.size();i++)
- {
- System.out.print(list.get(i)+" ");
- }
- return false;
- }
- public static void main(String[] args) {
- int array[] = {2,1,3,1,4};
- int duplication[] =new int[array.length];
- int length = array.length;
- boolean r = duplicate(array,length,duplication);
- System.out.println(" "+r+" "+duplication[0]);
- }
- }
扫码关注一起随时随地学习!!!就在洋葱攻城狮,更多精彩,等你来!!