劍指offer 29陣列中出現次數超過一半的數字

2021-07-12 07:50:47 字數 711 閱讀 7656

題目:陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。

拿到題目的第一反應是將陣列排序,然後判斷陣列中間的數字長度是否超過陣列長度的一半。若陣列中出現最多次數的數字為0且長度超過陣列的一半時,輸出也為0,該怎麼判斷是存在數字0超過一半長度還是不存在超過一半長度的數字?可以新增乙個布林全域性變數,若是存在數字0且長度超過陣列長度的一半,將該變數設為true,否則為false,最後根據輸出的數字和全域性變數共同判斷是否存在超過陣列長度一般的數字。

class solution 

}return num;

}};

排序的時間複雜度是o(nlogn),有沒有更快的演算法呢?

假設陣列中有乙個數字出現次數比其他所有數字出現的次數都多,可以在遍歷陣列的時候儲存2個值,乙個是數字,乙個是次數,遍歷移到下乙個數字時,若與前面相同,次數+1,若不同次數-1,如果次數為0,則儲存下乙個數字並設定次數為1,要找的數字次數比其他所有數字的次數都多,那麼要找的數字一定是最後一次將次數設為1時對應的數字。

class solution 

};

這個只需遍歷2次數組,因此時間複雜度為o(logn)。 

劍指Offer29陣列中出現次數超過一半的數字

題目 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2.分析 看到這個題的時候我首先想的是加乙個輔助陣列,統計出每乙個數出現的次數,因為題目中給的陣列是不知道的所以不能用雜湊儲存的方法,那麼只能用普...

劍指offer 29 陣列中出現次數超過一半的數字

陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。如果某個數符合條件,它一定是中位數。因此,找出中位數。如果乙個數num,左邊比它小,右邊比它大,它的下標是index。如果ind...

offer29 陣列中出現次數超過一半的數字

coding utf 8 offer29 最開始儲存兩個數值 陣列中的乙個數字以及它出現的次數,然後遍歷,如果下乙個數字等於這個數字,那麼次數加一,如果不等,次數減一,當次數等於0的時候,在下乙個數字的時候重新複製新的數字以及出現的次數置為1,直到進行到最後,然後再驗證最後留下的數字是否出現次數超過...