用时间复杂度为n的方法找出水王

一、题目

三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖 数目超过了帖子数目的一半。

  如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?

二、设计思想

从头到尾遍历帖子列表,比较相邻两个id,若相同,则记相同的id有几个,否则,将两个id消掉,同时计数减一。

三、源代码

#include<iostream.h>
int main()
{
    int arry[10]={1,1,3,3,2,2,2,2,3,3};
    int id=arry[0];
    int k=0;
    for(int i=0;i<9;)
    {
        if(id==arry[i])
        {
            id=arry[i];
            k++;
            i++;
        }
        else
        {
            k--;
            if(k<1)
            {
                id=arry[i+1];
                k=0;
            }
            i++;
        }
    }
    cout<<id;
    return 0;
}

四、结果截图

五、实验心得

这次实验题目不难,但是想想出好的解决方案却不容易,做完实验后,我认为以后遇到问题要多从不同的角度思考。

时间: 2024-10-31 17:31:29

用时间复杂度为n的方法找出水王的相关文章

给出2n+1个数,其中有2n个数出现过两次,如何用最简便的方法找出里面只出现了一次的那个数(转载)

有2n+1个数,其中有2n个数出现过两次,找出其中只出现一次的数 例如这样一组数3,3,1,2,4,2,5,5,4,其中只有1出现了1次,其他都是出现了2次,如何找出其中的1? 最简便的方法是使用异或,代码如下: public class XOR { public static void main(String[] args){ int[] arr={3,3,1,2,4,2,5,5,4}; int res=0;//初始值 for(int i=0;i<arr.length;i++){ res ^=

“找出水王”分析报告

“找出水王”分析报告 一.题目要求 三人行设计了一个灌水论坛.信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子.坊间风闻该“水王”发帖数目超过了帖子数目的一半. 如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗? 二.设计思路 1.水王的发帖数超过所有人的一半,这个是个重要信息. 2.这个就和开心消消乐一样,一对一对的把不同的id消去,剩下的一定就是水王的id. 3.因为水王的i

面试题:在一个数组中有0-99之间的整数101个(数组无序),用高效方法找出其中的唯一的重复元素!

/* * 问题:找出101个数据中重复的元素 * 题目如下:现有0到99,共计100个整数,各不相同,将所有数放入一个数组,随机排布. *        数组长度101,多余的数字是0到99其中任意一个数(唯一重复的数字) *        请将这个重复的数字找出来 * 分析: *    A:把数组构造出来 *    B:把数组元素添加进去 *    C:对数组的元素进去打乱(随机分布) *    D:找出重复的元素 */ 这道题有三种方式:第一种用交换排序找出,第二种求数组的和再减去0-99,

在一个数组里面,除了一个数是只有一个之外,其他都是有两个的,编写一个方法找出这唯一的一个数

1 public class singleNum { 2 /* 3 * 因为a^b^a=b,所以1^2^2^3^3=1 4 * 5 * */ 6 7 public int single(int A[]) 8 { 9 int aim,i; 10 for(aim=0,i=0;i<A.length;i++) 11 { 12 aim=aim^A[i]; 13 } 14 return aim; 15 } 16 17 public static void main(String[] args) 18 { 1

找出水王

一.题目: 现有一个灌水论坛,信息学院的学生都喜欢在上面交流灌水.传说在论坛上有一个“水王”,它不但喜欢发帖,还会回复其他ID发的每个帖子.坊间风闻该“水王”发帖数目已超过了帖子数目的一半. 如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者ID在其中,请设计算法快速找到这个传说中的“水王”. 二.设计思路 令水王id=0:当相同时count+1,不同时count-1.当count为0时,令水王id=a[i].由于水王的id超过一半,所以最后一定是水王的id. 三.代码 #include

软件工程课堂练习--找出“水王”

一.题目要求 现有一个灌水论坛,信息学院的学生都喜欢在上面交流灌水.传说在论坛上有一个“水王”,它不但喜欢发帖,还会回复其他ID发的每个帖子.坊间风闻该“水王”发帖数目已超过了帖子数目的一半. 如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者ID在其中,请设计算法快速找到这个传说中的“水王”. 二.设计思路 程序的设计思路大体就是,首先设2个变量,将第一个数暂时给shuiwang这个变量并且和下一个数比较,如果相同则用一个X变量自加一,不同则减一:如此循环,如果遇到不同时,一直减减减,

结对开发----找出“水王&quot;

一.题目 三人行设计了一个灌水论坛.信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子.坊间风闻该“水王”发帖数目超过了帖子数目的一半. 如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗? 二.设计思路 这道题的主要突破口在与水王的贴子超过了总帖子数的一半,所以在老师上课”消消乐模式“的启示下,有了灵感. 三.实验代码 #include<iostream.h> void main

位运算 找出给定的数中其他数都是两个,有两个是一个的数

题目大意: 给定你n个数, 其中有n-2个数都是两两成对的,有两个是单独出现的,如n = 8, 2 3 2 5 3 6 4 6, 这时候4和5是单独的两个,所以答案就是4,5,其中n的范围是1e6. 思路: 之前做过找一个单独的数的题,那个题是用一个比较巧妙的方法来做的,不过这个也是一类经典问题,用到了强大的位运算,有了那个题的基础再来做这个题就简单了.(附:找一个的题目链接). 刚开始我是用了O(nlogn)的时间复杂度来做的,先排序,然后用类似找一个的方法找出第二个.我觉得对于1e6的数据量

给出两个单词(start和end)与一个字典,找出从start到end的最短转换序列

问题 给出两个单词(start和end)与一个字典,找出从start到end的最短转换序列.规则如下: 一次只能改变一个字母 中间单词必须在字典里存在 例如: 给出 start = "hit"end = "cog"dict = ["hot","dot","dog","lot","log"] 返回 [ ["hit","hot",&