剑指offer 3. 数组中重复的数字

  1. 空间复杂度O(n),时间复杂度O(n) 思路:通过定义长度N的数组,空间复杂度高一点,但易理解
public class Solution {

    public boolean duplicate(int numbers[],int length,int [] duplication) {
        // 1. 长度为0,不重复
        if(length == 0){
            return false;
        }
        // 2. 创建长度为N的数组往里设置值(规则下标与值相同,当第二次设置时便为重复值)
        Integer[] temp = new Integer[length];    
        for(int i = 0; i< length; i++){
           if(temp[numbers[i]] == null) {
              temp[numbers[i]] = numbers[i];
               continue;
           }
          duplication[0] = numbers[i];
          return true;
        }
        // 3. 设置完成未找到重复值,不重复
        return false;
    }
}
  1. 空间复杂度O(1),时间复杂度O(n)

思路:原数组交换,易出问题 badCase: [6,3,2,0,2,5,0] 输出:true 0 但是2是第一个重复的数字,此方式优先将0输出

public class Solution {
  
    public boolean duplicate(int numbers[],int length,int [] duplication) {
        if(length == 0){
            return false;
        }
        for(int i = 0; i< length; i++){
            int temp = 0;
            while(numbers[i] != i){
                // 将numbers[i]放入相应的位置,
                // 若当前位置已经存在该元素则重复
                if(numbers[numbers[i]] == numbers[i]){
                    duplication[0] = numbers[i];
                    return true;
                }
                // 若当前位置不存在元素则放入
                temp = numbers[numbers[i]];
                numbers[numbers[i]] = numbers[i];
                numbers[i] = temp;
            }
        }
        return false;
    }
}
全部评论

相关推荐

08-25 14:25
门头沟学院 Java
点赞 评论 收藏
分享
小肥罗:此乃引蛇出洞之计,勾出你想去杭州的原因再告诉你不在杭州,让你打脸,自己离开。好一招抛砖引玉,虾仁猪心。你回复:计划去杭州,但我心中第一选择是宁波~巧了! 这计名叫“阿Q精神胜利法之厚脸皮不要脸我不尴尬谁爱尴尬谁尴尬去”之计!克制一切!
这个工作能去吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务