标签:
二、设计思路
三、源代码
// waterking.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include"iostream" using namespace std; void Data(int length,int A[]) { cout<<"请输入ID列表:"<<endl; for(int i=0;i<length;i++) { cin>>A[i]; } } int main() { int length; int single=0; int ID; //设置信号量 cout<<"请输入帖子数量:"; cin>>length; int * waterking=new int [length]; Data(length,waterking); for(int i=0;i<length;i++) { if(single==0) { ID=waterking[i]; single++; } else if(waterking[i]==ID) { single++; } else { single--; } } cout<<"水王为:"<<ID<<endl; return 0; }
四、实验结果
五、结果分析
这是很典型的要求算法优化,代码也不长,主要是考虑应该用什么样的方法实现,要怎样去实现代码的优化。要实现代码的优化,首先要解决的是找到问题解决的核心,从核心入手,才能有思路去探讨解决问题的途径。这道题中,根据条件我们可以知道,半数以上帖子都是一个ID的,所以,只要找到中间的值,就能找到所谓的水王,但是,这样的优化还不够完美,要将他的时间复杂度降为O(n^2),就要考虑相同ID和不同ID之间的关系,对于不同的ID,直接摒除,那么就可以排除水王的存在,因为水王发帖数足够大,那么最后剩下的肯定是水王。
这个题中,代码的优化过程不是一蹴而就的,而是逐步的思考深入,找到问题的关键点才渐渐实现理想的优化过程。而这个过程,恰恰是我们需要关注的。
标签:
原文地址:http://www.cnblogs.com/hujinhui/p/5509744.html