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

2021-07-23 04:31:31 字數 839 閱讀 6442

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

思路1: 基於partition函式的o(n)演算法

對陣列排序,排序後中間的數一定是出現次數超過陣列長度一半的數字,即中位數。採用快排思想排序,隨機選擇數字pivot,比a[pivot]小的排在左邊,比a[pivot]大的排在右邊。

排完若pivot小於length/2,則中位數字於其右邊,對[pivot+1, high]繼續快排

排完若pivot大於length/2,則中位數字於其左邊,對[low, pivot-1]繼續快排

排完若pivot==length/2, 則中位數即為a[pivot]

**:int parti(int *a, int low, int high)

a[low] = temp;

return low;

}int func(int *a, int len)

else if (pivot > middle)

else

}return a[pivot];

}思路2: 要求的數字出現的次數比其餘數字出現次數和還要多

儲存兩個變數value(存放陣列值)和times(次數)。遍歷陣列,剛開始value存放a[0]值,times存放value值出現次數。當a[i]與value相等時,times++;不等時times--;當times變為0時,value存放a[i]值

**:int func(int *a, int len)

if (a[i] != value)

else

}return value;

}

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

何海濤 劍指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...