zoukankan      html  css  js  c++  java
  • 剑指 Offer 03. 数组中重复的数字

    /*
        1、最直观的想法是,我直接一个俩层循环,一个一个比,不过效率太差了;
        2、第二种思路,长度为n的数组,数字都在 0~ n-1 的范围,这样如果我们把这个数组按升序排列
        扫描这个数组的元素,若数组不重复,会发现 第 i 个元素必定 为 i。
        所以得出这样的思路 
                1)从头扫描数组,下标为 i 的数字 是不是等于 i
                        是:继续扫描
                        不是:将其和第 i 个数字比较,比较结果
                                若相等,重复,返回该数字
                                若不相等,交换这俩个数字
                2)扫描完毕,未发现重复,返回-1
    */
    class Solution {
        public int findRepeatNumber(int[] nums) {
            for(int i = 0;i < nums.length;i++){
               while(nums[i] != i){
                   if(nums[i] == nums[nums[i]]){
                       return nums[i];
                   }
                   int tmp = nums[i];
                   nums[i] = nums[tmp];
                   nums[tmp] = tmp;
               }
            }
            return -1;
        }
    }
  • 相关阅读:
    左式堆
    winsock库
    二叉堆
    关键字explicit
    HDOJ 1012
    HDOJ 1013
    STL priority实例
    二项队列
    ASP.NET Session过期问题揭秘
    RenderControl (asp.net)
  • 原文地址:https://www.cnblogs.com/peanut-zh/p/14124181.html
Copyright © 2011-2022 走看看