-
动态更新num与ans ,ans可以随变假设。 只有那个大于n+1/2的才会被留下来 转自:https://www.cnblogs.com/kuangbin/archive/2011/07/30/2122217.html 我们很容易的看出来,在一个序列中如果去掉2个不同的元素, 那么原序列中的多元素,在新的序列中还是多元素, 因此我们只要按照序列依次扫描,先把t赋值给result, 增加个计数器,cnt = 1;然后向右扫描, 如果跟result相同,则cnt++,不同,那么cnt --, 这个真是我们从上面那个结论里得出的,一旦cnt == 0了, 那么必定c不是多元素,这个时候把t赋值为result,cnt = 1;, 重复该过程,知道结束,这个时候,result就是多元素, 这个的时间复杂度为n,该题本来可以用数组保存每个元素, 然后递归上述过程,可是,用数组超内存,
-
#include <iostream> #include <stdio.h> using namespace std; #define maxn 111 #define ll long long int n,a,b,ans,num; int main() { while(scanf("%d",&n)!=EOF) { ans=num=0; for(int i=0; i<n; i++) { scanf("%d",&a); if(num==0) { num=1; ans=a; } else { if(a==ans) num++; else num--; } } printf("%d\n",ans); } return 0; }
Ignatius and the Princess IV -dp思想
最新推荐文章于 2020-07-16 21:26:00 发布