import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class findSameNum {
public static int [] findSameNum1(int [] arr) {
//https://blog.csdn.net/weixin_34927903/article/details/114033321
Arrays.sort(arr);
ArrayList same = new ArrayList();
ArrayList result = new ArrayList();
int pre=-1;
for(int i=0;i<arr.length-1;i++) {
if(arr[i]==arr[i+1]) {
result.add(arr[i]);
}else if(arr[i]!=arr[i+1]&&arr[i]==pre){
result.add(arr[i]);
}
pre=arr[i];
}
System.out.println(result);
int [] rarr = new int[result.size()];
for(int i=0;i<result.size();i++) {
rarr[i] = (Integer)result.get(i);
}
return rarr;
}
public static int [] findSameNum2(int [] arr) {
ArrayList notSame = new ArrayList();
for(int i=0;i<arr.length;i++) {
int find=0;
for(int j=0;j<arr.length;j++) {
if(arr[i]==arr[j]&&i!=j) {
find=1;
break;
}
}
if(find==0) {
notSame.add(arr[i]);
}
}
//System.out.println("notSame="+notSame);
ArrayList same = new ArrayList();
for(int i=0;i<arr.length;i++) {
//https://www.runoob.com/java/java-arraylist-contains.html
if(notSame.contains(arr[i])==false) {
same.add(arr[i]);
}
}
System.out.println(same);
int [] rarr = new int[arr.length-notSame.size()];
for(int i=0;i<same.size();i++) {
rarr[i] = (Integer)same.get(i);
}
return rarr;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int [] arr = {1,1,2,3,1,4,8,2,7,5,4,10,6,5,9};
findSameNum1(arr);
findSameNum2(arr);
}
}
考虑解决思路的话,第一种方式:遍历计数,两层循环,第一层遍历所有数,第二层进行计数统计,类似冒泡排序
第二种方式:先使用其他速度更快的排序方式进行排序,如大量数据的话,使用快排、希尔排序等,之后通过一个O(1)的判断是否与前后结点相等的遍历,删除单独的值