【杂题】剑指 Offer 03. 数组中重复的数字

本问题对应课程链接:剑指offer刷题第四期

要求:

1、请打卡你的解题代码,如果能简单说一下思路则简单说一下思路。
2、给出你代码所用的时间复杂度和空间复杂度

共以下 7 个回答

  • June 普通 2023年11月27日 上午9:24
    class Solution {
        public int findRepeatDocument(int[] documents) {
            int i = 0;
            while(i < documents.length) {
                if(documents[i] == i) {
                    i++; // 只有相等 i 才递增
                    continue;
                }
                if(documents[documents[i]] == documents[i])
                    return documents[i];
                int tmp = documents[i];
                documents[i] = documents[tmp];
                documents[tmp] = tmp;
            }
            return -1;
        }
    }
    
    0 赞同 0 条回复
  • 桎梏 普通 2023年9月16日 下午1:48
    class Solution {
        //最优解 按索引位置匹配
        public int findRepeatNumber(int[] nums) {
            int i = 0;
            while (i < nums.length) {
                if (nums[i] == i) {
                    i++;
                    continue;
                }
                if(nums[i] == nums[nums[i]]) return nums[i];
                int tmp = nums[i];
                nums[i] = nums[tmp];
                nums[tmp] = tmp;
            }
            return -1;
        }
    }
    
    0 赞同 0 条回复
  • Marshan 普通 2023年9月11日 下午7:41

    哈希表,应该不是最优解

    class Solution {
    public:
        int findRepeatNumber(vector<int>& nums) {
            unordered_map<int,int> map;
            int res = -1;
            for(int num:nums){
                map[num]++;
                if(map[num] > 1){
                    return num;
                }
            }
            return res;
        }
    };
    
    0 赞同 0 条回复
  • Mby 普通 2023年8月22日 下午2:26
    class Solution {
        public int findRepeatNumber(int[] nums) {
            //原地交换
            int i = 0;
            while(i < nums.length){
                if(nums[i] == i){
                    i++;
                    continue;
                }
                if(nums[nums[i]] == nums[i]) return nums[i];
                int tmp = nums[i];
                nums[i] = nums[tmp];
                nums[tmp] = tmp;
            }
            return -1;
        }
    }
    
    
    0 赞同 0 条回复
  • 长河呼叫黄江 普通 2023年8月12日 下午3:28

    8.10 周四
    Day31:下面是代码

    class Solution {
        public int findRepeatNumber(int[] nums) {
            Set<Integer> dic = new HashSet<>();
            for(int num : nums){
                if(dic.contains(num)) return num;
                dic.add(num);
            }
            return -1;
        }
    }
    
    
    0 赞同 0 条回复
  • NullPointerException 普通 2023年8月11日 下午3:23

    class Solution {
    public int findRepeatNumber(int[] nums) {
    //原地交换 找到每个下标应有的元素 如果当前元素等与当前元素下标里的元素 就重复
    int i=0;
    while(i<nums.length)
    {
    if(nums[i]i)
    {
    i++;
    continue;
    }
    if(nums[i]
    nums[nums[i]]) return nums[i];
    int temp = nums[nums[i]];
    nums[nums[i]]=nums[i];
    nums[i]=temp;

        }
    return 0;
    }
    

    }

    0 赞同 0 条回复
  • AD钙奶 普通 2023年8月11日 上午11:46

    做一个桶数组,存次数

    class Solution {
        public int findRepeatNumber(int[] nums) {
            int[] arr = new int[nums.length];
            for(int i = 0; i < arr.length; i ++) {
                arr[nums[i]] ++;
                if(arr[nums[i]] > 1) return nums[i];
            }
            return -1;
        }
    }
    
    0 赞同 0 条回复

# 回答此问题

后才能回答