劍指offer_編程題_數組中重複的數字

  • 題目
    在一個長度爲n的數組裏的所有數字都在0到n-1的範圍內。 
    數組中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。
    請找出數組中任意一個重複的數字。
    例如,如果輸入長度爲7的數組{2,3,1,0,2,5,3},那麼對應的輸出是第一個重複的數字2。
    
  1. 要求返回任意一個重複的值到duplication[0]
    暴力求法
    class Solution {
    public:
        // Parameters:
        //        numbers:     an array of integers
        //        length:      the length of array numbers
        //        duplication: (Output) the duplicated number in the array number
        // Return value:       true if the input is valid, and there are some duplications in the array number
        //                     otherwise false
        bool duplicate(int numbers[], int length, int* duplication) {
            for (int i = 0; i < length; ++i)
            {
         	   for (int j = i+1; j < length; ++j)
         	   {
         		   if(numbers[i]==numbers[j])
         		   {
         			   *duplication = numbers[i];
         			   return true;
         		   }
         	   }
            }
            return false;
        }
    };
    
  2. 散列求法
    class Solution {
    public:
        // Parameters:
        //        numbers:     an array of integers
        //        length:      the length of array numbers
        //        duplication: (Output) the duplicated number in the array number
        // Return value:       true if the input is valid, and there are some duplications in the array number
        //                     otherwise false
        bool duplicate(int numbers[], int length, int* duplication) {
            int *temp = new int[length]();
            for (int i = 0; i < length; ++i)
            {
         	   if (temp[numbers[i]]==0)
         	   {
         		   temp[numbers[i]] = 1;
         	   }
         	   else
         	   {
         		   *duplication = numbers[i];
         		   return true;
         	   }
            }
            return false;
        }
    };
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章