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

2021-08-16 21:47:27 字數 908 閱讀 3040

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

分析:我用的是比較蠢的思想,複雜度比較高,就是統計陣列中所有值出現的次數,然後再判斷這些值是不是大於陣列的一半,思想很蠢,所以一遍就直接過了。但是這不是該學習的思想。下面介紹乙個這種題最有效的思想,複雜度都是o(n)。

第一種:基於快排的思想

如果這個陣列是排好序的,那麼乙個數字出現的次數如果超過陣列長度的一半,那麼肯定是中位數,基於快排的思想,我們隨機選乙個數,然後把小於他的都放在他的左邊,把大於他的都放在他的右邊,如果他的下標大於陣列的一半,那麼中位數在他的左邊,遞迴就行了,反之就在他的右邊遞迴。

第二種:基於陣列特點

我的**:

class solution

return 0;

}int pos(vectornum,int n)

}

// verifying

count = 0;

for(inti = 0; i < n; i++)

if(count * 2 > n)returnnum;

return0;

}

};

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

何海濤 劍指offer 名企面試官精講典型程式設計題 九度oj 題目描述 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。輸入 每個測試案例包括2行 第一行輸入乙個整數n 1 n 100000 表...

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

陣列中出現次數超過一半的數字 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。class solution count 0 for auto i numbers if i k ...

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

題目描述 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。解題思路 將陣列按大小排序,若存在數字出現次數超過陣列長度的一般,則陣列中位數必定為該數字 1 將陣列排序完成後,取a...