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 };
  • 相关阅读:
    11111 Generalized Matrioshkas
    Uva 442 Matrix Chain Multiplication
    Uva 10815 Andy's First Dictionary
    Uva 537 Artificial Intelligence?
    Uva 340 MasterMind Hints
    SCAU 9508 诸葛给我牌(水泥题)
    Uva 10420 List of Conquests(排序水题)
    Uva 409 Excuses, Excuses!
    10/26
    11/2
  • 原文地址:https://www.cnblogs.com/zzw1024/p/11650464.html
Copyright © 2011-2022 走看看