zoukankan      html  css  js  c++  java
  • LeetCode:寻找重复数【287】

    LeetCode:寻找重复数【287】

    题目描述

    给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。

    示例 1:

    输入: [1,3,4,2,2]
    输出: 2
    

    示例 2:

    输入: [3,1,3,4,2]
    输出: 3
    

    说明:

    1. 不能更改原数组(假设数组是只读的)。
    2. 只能使用额外的 O(1) 的空间。
    3. 时间复杂度小于 O(n2) 。
    4. 数组中只有一个重复的数字,但它可能不止重复出现一次。

    题目分析

      这道题由于说明中对时间复杂度和空间复杂度的限制,我们采用了龟兔相遇求环入口的方式,这种方式的的前提是我们要把一个数组看做一个又环链表,元素的值标识下一个元素的位置,元素的下表标识该元素的位置

      如果你能理解上面这段话的意思的话,我们可以看看入口的求解方式:

      

    Java题解

    class Solution {
        public int findDuplicate(int[] nums) {
            if(nums.length>1)
            {
                int slow = nums[0];
                int fast = nums[nums[0]];
                //第一次相遇
                while(slow!=fast)
                {
                    slow = nums[slow];
                    fast = nums[nums[fast]];
                }
                //第二次相遇
                fast=0;
                while(slow!=fast)
                {
                     slow = nums[slow];
                     fast = nums[fast];
                }
                return slow;
            }
            return -1;
            
        }
    }
    
  • 相关阅读:
    python流行的原因
    shell rename directory
    shell if [ -d filename]
    eclipse文本编码格式修改为UTF-8
    egrep 第几列开始
    Java double 精度
    BigDecimal 两种方式
    使用SecureCRT连接ubuntu
    eclipse快速查找一个变量、方法或者类被引用的地方
    我的互联网金融行业经验总结
  • 原文地址:https://www.cnblogs.com/MrSaver/p/9557479.html
Copyright © 2011-2022 走看看