OJ1- 数组中出现次数超过一半的数字
思路:
代码如下:
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
int x = 0, votes = 0, count = 0;
for(int num : numbers){
if(votes == 0) x = num;
votes += num == x ? 1 : -1;
}
// 验证 x 是否为众数
for(int num : numbers)
if(num == x) count++;
return count > numbers.size() / 2 ? x : 0; // 当无众数时返回 0
}
};
OJ2-字符串中找出连续最长的数字串
思路:用while循环记录第一个数字串,在for中i进行了i++操作,数字若未记录完,则不停的循环,直到遇见第二个数字串,此时比较他们的长度,如果遇到了更长的,则更新数字串。
代码如下:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str;
str.resize(255);
scanf("%s",&str[0]);
//cin>>str;
if(str.length()>255)
perror("length");
string tmp;//用来临时存放数字字符串
string max;//存放最长的数字字符串
int maxlength=0;
for(int i=0;i<str.size();i++)
{
//if(str[i]>'0'&&str[i]<'9')
while(str[i]>='0'&& str[i]<='9')
{
tmp+=str[i++];
}
if(tmp.size()>maxlength)
{
max=tmp;
maxlength=tmp.size();
}
tmp.clear();
}
//c_str返回当前字符串的首字符地址
printf("%s\n",max.c_str());
//cout<<max;
return 0;
}