zoukankan      html  css  js  c++  java
  • 寻找水王

    一、题目要求

    三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。
    如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
    要求将设计思想、代码实现、实现截图、个人总结以博文的形式发表。(截止日期2015-4-22晚18:00)
     
    二、设计思想
    上课时用排序算法将ID表排成有序的,根据水王ID超过总贴数一半,则在有序表中的N/2项一定是水王的ID这一思路可以求出水王iD,此时算法的复杂度为O(n*n),但是老师要求时间复杂度为O(n),因此可以遍历ID表,两两相邻的ID进行比较,若不同则删掉,那么在剩余的ID表中水王的ID号仍然超过总数的一半,不断重复这个过程,把列表中ID总数降低,最后剩下的肯定是水王的ID,这些无序ID号可以用数组arr表示。
    三、代码
     
     
    #include<iostream.h>
    void main()
    {
    	int arr[11]={1,2,2,3,4,2,2,5,3,2,2};//假设的ID号
    	int shuiwang = 0;  
    	int count=0;  //标记
    	for(int i=0;i<11;i++)
    	{  
    		if(count == 0)
    		{  
    			shuiwang = arr[i];  
    			count = 1;  
    		}  
    		else
    		{  
    			if(shuiwang == arr[i])  
    				count ++;  
    			else   
    				count --;  
    		}  
    	} 
    	cout<<"水王的ID是"<<shuiwang<<endl;
    }
    

      四、截图

    五、总结

    这次实验题目有个条件就是水王发帖的ID号超过所以ID号一半以上,因此这就是这题的突破点,对于时间复杂度,好的设计思路可以大大降低时间复杂度,比如这题就可以将时间复杂度从O(N*N)降低到O(N)。

  • 相关阅读:
    Spring AOP Capabilities and Goal
    CDI Features
    Java Design Patterns
    Connector for python
    Spring reference
    a+1、&a+1、*(a+1)、*(&a+1)、*(*(&a+1))的区别
    int **p和int *p
    Hibernate注解
    功能测试
    零售商商品管理系统代码节选
  • 原文地址:https://www.cnblogs.com/2015tan/p/4448218.html
Copyright © 2011-2022 走看看