題目類型
數組
題目描述
數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。例如輸入一個長度爲9的數組{1,2,3,2,2,2,5,4,2}。由於數字2在數組中出現了5次,超過數組長度的一半,因此輸出2。如果不存在則輸出0。
code
- 用c++ count函數統計次數
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
int n=numbers.size();
for(int i=0; i<n; i++){
if(count(numbers.begin(),numbers.end(),numbers[i])>n/2)
return numbers[i];
}
return 0;
}
};
運行時間:3ms
佔用內存:608k
- 用sort然後取中位數:因爲某數個數佔到總數一半以上,則中央的數字一定是該數;否則無滿足條件的數字,返回0
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
sort(numbers.begin(),numbers.end());
int n=numbers.size();
int mid=numbers[n/2];//取中位數
int count=0;
for(int i=0; i<n; i++){
if(numbers[i]==mid)
count++;
}
if(count>n/2)
return mid;
else
return 0;
}
};
運行時間:3ms
佔用內存:616k
- 排序然後計數
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
sort(numbers.begin(), numbers.end());
int n=numbers.size();
int num=numbers[0], count=1;
if(n==1)
return num;
for(int i=1; i<n; i++){
if(numbers[i]==num){
count++;
if(count>n/2)
return num;
}
else{
num=numbers[i];
count=1;
}
}
return 0;
}
};
運行時間:3ms
佔用內存:484k