找出数组中那个第一次重复的数字

先排序,在找重复的

手写排序,较为麻烦

public class Solution {
          
   
    public boolean duplicate(int numbers[],int length,int [] duplication) {
          
   
    //使用冒泡排序进行排序
        for(int i=0 ;i<length-1;i++){
          
   
            for(int j=0;j<length-1-i;j++){
          
   
                if(numbers[j]>numbers[j+1]){
          
   
                    int temp = numbers[j];
                    numbers[j] = numbers[j+1];
                    numbers[j+1]=temp;
                }
            }
        }
        //从已经升序的序列中找到重复值
        for(int k=0;k<length-1;k++){
          
   
            if(numbers[k]==numbers[k+1]){
          
   
                duplication[0]=numbers[k];
                return true;
            }
        }
        return false;
    }
}

利用Arrays工具类进行排序

哈希表

利用HashSet元素无序唯一的特性去判断。

剑指offer推荐

数组的长度为 n 且所有数字都在 0 到 n-1 的范围内,我们可以将每次遇到的数进行"归位",当某个数发现自己的"位置"被相同的数占了,则出现重复。扫描整个数组,当扫描到下标为 i 的数字时,首先比较该数字(m)是否等于 i,如果是,则接着扫描下一个数字;如果不是,则拿 m 与第 m 个数比较。如果 m 与第 m 个数相等,则说明出现重复了;如果 m 与第 m 个数不相等,则将 m 与第 m 个数交换,将 m “归位”,再重复比较交换的过程,直到发现重复的数。

public class Solution {
          
   
    public boolean duplicate(int numbers[],int length,int [] duplication) {
          
   
        if(numbers == null || length == 0){
          
   
            return false;
        }
        for(int i = 0;i < length;i++){
          
   
            while(numbers[i] != i){
          
   
                if(numbers[i] == numbers[numbers[i]]){
          
   
                    duplication[0] = numbers[i];
                    return true;
                }
                int temp = numbers[i];
                numbers[i] = numbers[temp];
                numbers[temp] = temp;
            }
        }
        return false;
    }
}
经验分享 程序员 微信小程序 职场和发展