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

2021-08-18 01:15:41 字數 1096 閱讀 4988

這個解法參考了劍指offer,利用快排的partition函式思想,超過一半的數字肯定是陣列的中位數,也就是下標為n/2的數字,我們每次隨機找乙個下標,然後逐步接近n/2.

還要注意vector的傳參問題,partition是需要對vector進行排序的,所以要傳入引用,並且用< algorithm >中自帶的swap方法對vector的兩個元素進行交換。

#include 

#include

#include

using

namespace

std;

int partition(vector

&arr, int length, int start, int end)}}

++small;

swap(arr[small], arr[end]);

return small;

}bool checkmorethanhalf(vector

arr, int length, int number)

}if (times * 2

<= length)

return

true;

}int morethanhalfnum_solution(vector

numbers)

else

}if (!checkmorethanhalf(numbers, numbers.size(), numbers[index]))

return

0; return numbers[index];

}int main()

; int length = sizeof(arr) / sizeof(arr[0]);

//quick_sort(arr, length, 0, length-1);

vector

array;

for (int i = 0; i < length; i++)

int ret = morethanhalfnum_solution(array);

printf("%d", ret);

system("pause");

}

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

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