数组输出重复元素打印控制台

img


看看大家的解题思路,除了循环遍历添加次数统计以外,都有什么办法,解出正确答案!


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)的判断是否与前后结点相等的遍历,删除单独的值