zoukankan      html  css  js  c++  java
  • 剑指offer——01数组中重复的数字

    题目描述

    在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。
     
    方法一:
      从0位置遍历,开辟一个lenght大小的数组,统计每个数字出现的次数,当某个数字出现的次数大于1时,则是第一个重复数字
      缺点:需要开辟lenght大小的额外空间
     
    方法二:
      在原数组上进行交换排序,因为题目原意为:数字保证为0-n-1,【代码中我没有判断不是这种情况】,那么排序时,一定是i位置数字为i,在交换中碰到了重复数字,则输出
     
     1 class Solution01 {
     2 public:
     3     // Parameters:
     4     //        numbers:     an array of integers
     5     //        length:      the length of array numbers
     6     //        duplication: (Output) the duplicated number in the array number
     7     // Return value:       true if the input is valid, and there are some duplications in the array number
     8     //                     otherwise false
     9     bool duplicate(int numbers[], int length, int* duplication) {
    10         vector<int>v(length, 0);
    11         for (int i = 0; i < length; ++i)
    12         {
    13             v[numbers[i]]++;
    14             if (v[numbers[i]] > 1)
    15             {
    16                 *duplication = numbers[i];
    17                 return true;
    18             }
    19         }
    20         return false;
    21     }
    22 };
    23 
    24 
    25 class Solution02 {
    26 public:
    27     // Parameters:
    28     //        numbers:     an array of integers
    29     //        length:      the length of array numbers
    30     //        duplication: (Output) the duplicated number in the array number
    31     // Return value:       true if the input is valid, and there are some duplications in the array number
    32     //                     otherwise false
    33     bool duplicate(int numbers[], int length, int* duplication) {
    34         for (int i = 0; i < length; ++i)
    35         {
    36             while (numbers[i] != i)
    37             {
    38                 if (numbers[i] == numbers[numbers[i]])
    39                 {
    40                     *duplication = numbers[i];
    41                     return true;
    42                 }
    43                 swap(numbers[i], numbers[numbers[i]]);
    44             }
    45         }
    46         return false;
    47     }
    48 };
  • 相关阅读:
    My97 DatePicker 的jQuery插件
    UITableView 的 delegate2个基本方法
    你还在使用myImage = [UIImage imageNamed:@"icon.png"];吗
    自动生成数学题型三 (框架Struts2)题型如 a+b=c(a、b、c都为分数)
    自动生成数学题型二(框架struts2)题型如((a+b)*c=d)
    自动生成数学题型一 (框架Struts2) 题型如(a+b=c)
    创业团队应具备的要素
    在服务器中linux的centos系统如何封ip
    创业成功:必须具备的12个要点
    PHP+mysqli如何连接MySQL数据库,MySQL, Improved
  • 原文地址:https://www.cnblogs.com/zzw1024/p/11650464.html
Copyright © 2011-2022 走看看