数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
方法一:
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
if(numbers.empty())
return 0;
int res = numbers[0];
int count = 1;
for(int i = 1; i < numbers.size(); ++i)
{
if(count == 0)
{
res = numbers[i];
count = 1;
}
else
{
if(numbers[i] == res)
count++;
else
count--;
}
}
for(int i = 0; i < numbers.size(); ++i)
{
if(numbers[i] == res)
count++;
}
return (count > (numbers.size()/2)) ? res : 0;
}
};
方法二:
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
if(numbers.empty())
return 0;
int len = numbers.size();
sort(numbers.begin(),numbers.end());
int mid = numbers[len/2];
int count = 0;
for(int i = 0; i < len; ++i)
{
if(numbers[i] == mid)
count++;
}
return (count > (len/2)) ? mid : 0;
}
};
开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。
处理:
1、 记录最多8条错误记录,循环记录,对相同的错误记录(净文件名称和行号完全匹配)只记录一条,错误计数增加;
2、 超过16个字符的文件名称,只记录文件的最后有效16个字符;
3、 输入的文件可能带路径,记录文件名称不能带路径。
输入描述:
一行或多行字符串。每行包括带路径文件名称,行号,以空格隔开。
输出描述:
将所有的记录统计并将结果输出,格式:文件名 代码行数 数目,一个空格隔开,如:
示例1
输入
E:\V1R2\product\fpgadrive.c 1325
输出
fpgadrive.c 1325 1
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main(void){
string input, file;
vector<pair<string, int>> errors;
while (getline(cin, input)){
if (input.size() == 0)
break;
unsigned int f = input.rfind('\\');
file = input.substr(f + 1);
errors.push_back(make_pair(file, 1));
for (int i = 0; i<(errors.size() - 1); i++){
if (errors[i].first == file){
errors[i].second++;
errors.pop_back(); break;
}
}
}
if(errors.size() < 8)
{
int index = 0;
while(index < 8 && index < errors.size())
{
string cheak = errors[index].first;
int t = cheak.find(' ');
if(t > 16)
errors[index].first.erase(0,t - 16);
cout << errors[index].first << ' ' << errors[index].second << endl;
index++;
}
}
else
{
int index = errors.size() - 8;
while(index < errors.size())
{
string cheak = errors[index].first;
int t = cheak.find(' ');
if(t > 16)
errors[index].first.erase(0,t - 16);
cout << errors[index].first << ' ' << errors[index].second << endl;
index++;
}
}
}