结果貌似正确,但提交heap overflow 了,没被ac,
数组老犯这种错误。
/*
思路:
1.找出两个不同的元素的值存起来,用标记区分
2.默认tmp[0]的个数最多,
*/
class Solution {
public:
int majorityElement(vector<int>& nums) {
vector<int> tmp;
int count0=0,count1=0,diff_flag=0,len=nums.size();
// int var1,var2,temp;
if(len<2)return nums[0];
tmp.push_back(nums[0]);//tmp[0]=nums[0];//save nums0
tmp.push_back(0);//tmp[1]=0;
tmp.push_back(nums[1]);// tmp[2]=nums[1];
count0++;//tmp[0] default onece
for(int i=1;i<nums.size();i++)
{
printf(" %d",nums[i]);
tmp[2]=nums[i];
if( tmp[0]!=tmp[2])
{
count1++;
// printf("\ntmp[0]:%d,\n tmp[1]:%d\n",tmp[0],tmp[1]);
if(!diff_flag ){//first meet diff num
printf("\n======================tmp[0]:%d,\n tmp[1]:%d\n",tmp[0],tmp[1]);
tmp[1]=tmp[2];//save 1
diff_flag=1;
}
}
else count0++;
}
printf("\ncount0:%d,\n count1:%d\n",count0,count1);
printf("\ntmp[0]:%d,\n tmp[1]:%d",tmp[0],tmp[1]);
return count0>count1 ? tmp[0]: tmp[1];
}
};
好吧,理解错了,人家是要求大于一半的数,没有说只有两种数字。醉
想通过反向比的方法,不过考虑不清楚:
/*
思路:
理解错误:反向与是否可以,不好操作。
*/
class Solution {
public:
int majorityElement(vector<int>& nums) {
vector<int> tmp1(nums);
vector<int> judge(nums);
int len=nums.size();
int j=len-1;
for(int i=0;i<len-1;i++){
if(nums[i]==tmp1[j--]){
judge[i]=nums[i];
}else{
judge[i]=0;
}
}
for(int i=0;i<len-1;i++){
printf(" %d",judge[i]);
}
return 666;
}
};
不会做是正常的:
如何理解摩尔投票法 https://www.zhihu.com/question/49973163/answer/235921864
不会做,思考后就要早点看别人的想法,不要浪费时间。
public class Solution {
public int majorityElement(int[] num) {
int major=num[0], count = 1;
for(int i=1; i<num.length;i++){
if(count==0){
count++;
major=num[i];
}else if(major==num[i]){
count++;
}else count--;
}
return major;
}
}
主要在学习,不要慌:
: http://blog.csdn.net/Orion_TheStar/article/details/76850927