运行超时
int majorityElement(vector<int>& nums)
{
int n = 0;//由于众数出现的次数大于n/2,所以,当众数的次数-其他>0;
for(vector<int>::iterator it1 = nums.begin();it1!=nums.end();it1++)
{
//假设当前数为众数
for(vector<int>::iterator it2 = it1;it2!=nums.end();it2++)
{
//遍历假设为众数的数的后面的数,相同计数加一,不同减一
if(*it1 == *it2)
{
n ++;
}
else
{
n -- ;
}
}
//如果对比完,n>0就是众数
if( n > 0)
{
return *it1;
}
n = 0;
}
return 0;
}
别人的方法,使用哈希map
int maxSubArray(vector<int>& nums)
{
//贪心算法 之前的数的和小于0,就抛弃当前之前的序列和
int sum = 0,max_sum = nums[0];
for(vector<int> ::iterator it = nums.begin();it!=nums.end();it++)
{
sum += *it;
max_sum = max(max_sum,sum);
//如果sum < 0,重新开始找子序串
if(sum<0)
{
sum = 0;
}
}
return max_sum;
}
class Solution {
public:
int maxSubArray(vector<int>& nums)
{
//动态规划
int sum = nums[0],max_sum = nums[0];
for(int i = 1;i<nums.size();i++)
{
sum =max(nums[i]+sum,nums[i]);
max_sum = max(sum,max_sum);
}
return max_sum;
}
};