劍指Offer的學習筆記(C#篇)-- 數組中重複的數字

題目描述

        在一個長度爲n的數組裏的全部數字都在0到n-1的範圍內。 數組中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每一個數字重複幾回。請找出數組中任意一個重複的數字。 例如,若是輸入長度爲7的數組{2,3,1,0,2,5,3},那麼對應的輸出是第一個重複的數字2。

一 . 解題思路

        方法一:效率低的方法。數組

        給數組搞內外兩個循環,第一個循環是把數組的每個數都遍歷出來,而第二個循環是,除了第一個數組正在遍歷的那個數之外的數進行查找,找到和他同樣的,就結束,不同,再繼續,文字表述太抽象,我都傻了,請看圖!!(按照1-2-3-4一直循環就行),可是效率低。spa

        代碼實現:3d

class Solution
{
    public bool duplicate(int[] numbers, int[] duplication)
    {
        //數組遍歷
        for(int i = 0; i < numbers.Length; i++)
            {
                //拋去遍歷數組的第一個數後,開始遍歷,尋找相同的那個數
                for(int j = i + 1; j < numbers.Length; j++)
                {
                    //若是相同,則輸出
                    if(numbers[i]==numbers[j])
                    {
                        duplication[0]=numbers[i];
                        return true;
                    }
                }
            }
        //若是沒有,則返回false
        return false;
    }
}

        方法二:搞一個隊列code

        先看圖:blog

        啥意思呢:就是建一個隊列,遍歷一遍,若是隊列裏有重複的數,中止;沒有的話,繼續搞,用到一個.Contains。隊列

        代碼實現:it

using System.Collections.Generic;
class Solution
{
    public bool duplicate(int[] numbers, int[] duplication)
    {
        // write code here
        //爲0時的判斷
        if(numbers.Length==0)
            return false;
        //建個隊列
        Queue<int> que=new Queue<int>();
        //循環
         for(int i=0;i<numbers.Length;i++)
        {
            //隊列裏有的話,duplication[0]=numbers[i];返回ture
            if(que.Contains(numbers[i]))
            {
                 duplication[0]=numbers[i];
                 return true;
            }   
            //不然,把這個數加到隊列裏           
            else
            {
                 que.Enqueue(numbers[i]);
            }
        }
        return false;
    }
}
相關文章
相關標籤/搜索