寻找发帖水王

抖音助手工具 抖音助手工具,帮助你更好做抖音。 立即下载

题目:Tango是微软亚洲研究院的一个试验项目。研究院的员工和实习生们都很喜欢在Tango上面交流灌水。传说,Tango有一大“水王”,他不但喜欢发贴,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子总数的一半。如果你有一个当前论坛上所有帖子(包括回帖)的列表,其中帖子作者的ID也在表中,你能快速找出这个传说中的Tango水王吗? –《编程之美》

扩展:随着Tango的发展,管理员发现,“超级水王”没有了。统计结果表明,有3个发帖很多的ID,他们的发帖数目都超过了帖子总数目N的1/4。你能从发帖ID列表中快速找出他们的ID吗?

分析:在这个题目中,有一个计算机科学中很普遍的思想,就是如何把一个问题转化为规模较小的若干个问题。分治、递推和贪心等都有这样的思想。在转化过程中,如果能保证小的问题跟原问题的解是一致的就成功了。这样,我们可以通过寻找这样的方式将小问题转化为更小的问题。如何将大问题拆成小问题,或者如何大规模的数据降成小规模,而不影响解呢?

如果每次删除两个不同的ID,不管删除的ID是否包含“水王”的ID,在剩下的ID列表中,“水王”ID出现的次数仍然超过总数的一半。想到这一点之后,上述分析的思想已经构筑完成,就可以通过不断重复这个过程,把ID列表中的ID总数降低(转化为更小的问题),从而得到问题的答案。新的思路,避免了排序这个耗时的步骤,总的时间复杂度只有O(N),且只需要常数的额外内存。

代码如下:

[cpp]  view plain copy
  1. #include <stdio.h>  
  2.   
  3. typedef int Type;  
  4.   
  5. Type find (Type *a, int N)  
  6. {  
  7.     Type candiate;  
  8.     int i, nTimes;  
  9.     for (i = nTimes = 0; i < N; i++)  
  10.     {  
  11.         if (0 == nTimes)  
  12.         {  
  13.             candiate = a[i];  
  14.             nTimes = 1;  
  15.         }  
  16.         else  
  17.         {  
  18.             if (candiate == a[i])  
  19.             {  
  20.                 nTimes++;  
  21.             }  
  22.             else  
  23.             {  
  24.                 nTimes--;  
  25.             }  
  26.         }  
  27.     }  
  28.     return candiate;  
  29. }   
  30.   
  31.   
  32. int main()  
  33. {  
  34.     Type arr[] = {1, 2, 3, 4, 2, 5, 2, 2, 3, 2, 5, 2};  
  35.     printf("over harf id is %d\n", find(arr, 12));  
  36.     return 0;  
  37. }  


解扩展题:

求解内容极其相似,相同的思路进行求解即可。同时删除4个不同的ID后,剩余数据中3个多数id仍然是多数ID。

上题只需要一个结果,而现在需要3个结果,上题用到的nTimes,也应改为3个计数器。现在我们需要3个变量来记录当前遍历过的3个不同的ID,而nTimes的3个元素分别对应当前遍历过的3个ID出现的个数。如果遍历中有某个ID不同于这3个当前ID,我们就判断当前3个ID是否有某个的nTimes为0,如果有,那这个新遍历的ID就取而代之,并赋1为它的遍历数(即nTimes减1),如果当前3个ID的nTimes皆不为0,则3个ID的nTimes皆减去1。


[cpp]  view plain copy
  1. #include <iostream>  
  2.   
  3. using namespace std;  
  4.   
  5. int candidate[3];  
  6. int count[3] = {0};  
  7.   
  8. int input[100];  
  9. int num = 0;  
  10.   
  11. int main()  
  12. {  
  13.     cout<<"please input"<<endl;  
  14.     int t;  
  15.     while(cin>>t)  
  16.     {  
  17.         if (t == -1)  
  18.             break;  
  19.         input[num++] = t;  
  20.     }  
  21.   
  22.     bool flag = false;  
  23.   
  24.     for (int i = 0;i < num;i++)  
  25.     {  
  26.         flag = false;  
  27.         for (int j = 0;j < 3;j++)  
  28.         {  
  29.             if (count[j] == 0)  
  30.             {  
  31.                 continue;  
  32.             }  
  33.             if (candidate[j] == input[i])  
  34.             {  
  35.                 count[j]++;  
  36.                 flag = true;  
  37.             }  
  38.         }  
  39.   
  40.         if (flag == true)  
  41.         {  
  42.             continue;  
  43.         }  
  44.   
  45.         for (int j = 0;j < 3;j++)  
  46.         {  
  47.             if (count[j] == 0)  
  48.             {  
  49.                 candidate[j] = input[i];  
  50.                 count[j]++;  
  51.                 flag = true;  
  52.                 break;  
  53.             }  
  54.         }  
  55.   
  56.         if (flag == true)  
  57.         {  
  58.             continue;  
  59.         }  
  60.   
  61.         for (int j = 0;j < 3;j++)  
  62.         {  
  63.             count[j]--;  
  64.         }  
  65.   
  66.     }  
  67.   
  68.     cout<<count[0]<<" "<<count[1]<<" "<<count[2]<<endl;  
  69.     cout<<candidate[0]<<" "<<candidate[1]<<" "<<candidate[2]<<endl;  
  70. }  
2021年J题:基于STM32F103的周期信号波形识别与参数测量系统设计(立创EDA+SZPT_ZXL) 本文详细复盘了2021年全国大学生电子设计竞赛J题获奖项目,手把手教你如何基于STM32F103微控制器设计并实现周期信号波形识别与参数测量系统。文章深入剖析了硬件电路设计(包括程控放大、工作点抬升与滞回比较器)与核心软件算法(如动态采样、FFT频谱分析与波形识别逻辑),并分享了DMA传输、FFT库使用等实战要点与避坑指南,为嵌入式信号处理与电赛备赛提供了宝贵经验。 阅读详情

相关推荐

Shopee商品详情页反爬实战:手把手逆向x-sap-Ri和x-sap-Sec请求头加密

本文详细解析了Shopee商品详情页反爬机制中x-sap-Ri和x-sap-Sec请求头参数的加密逻辑,通过JS逆向技术手把手教你定位加密入口、分析哈希算法与对称加密实现,并提供完整实战案例和应对反爬策略的高级技巧,助力开发者突破电商平台数据采集难点。

weixin_27875131的博客 1824

算法学习十八----寻找发帖水王

题目:经常在论坛或者讨论区上面会看到一些人每个帖子都回复或者发了很多帖子(但是没有对其他用户有用途的)。现在写一个算法,找出发帖数目超过帖子总数的一半的用户ID--称为发帖水王。(注:本题假设发帖水王存在) 算法思路如下: 先对序列排序之后,计算出每个ID的次数,输出出现次数最大的用户ID即可。但是这个方法效率比较低。另一种方法,就是想办法将大问题转换成小问题,对列表进行扫描,每次删除

yipiankongbai的专栏 1480

汽车软件工程师必看:ASPICE开发流程全解析(附各阶段交付物清单)

本文全面解析了汽车行业广泛采用的ASPICE开发流程,详细介绍了从需求挖掘到系统架构设计、软件工程及测试验证各阶段的关键操作和交付物清单。针对汽车软件工程师,提供了实用的协作指南和工具推荐,帮助团队提升开发效率并降低项目风险,是掌握ASPICE标准的必备指南。

weixin_30733003的博客 640

寻找发帖“水王“(分治法)

寻找发帖"水王";分治法;O(n)

freeline的博客 1508

Abaqus 气动软体抓取器:从超弹性材料建模到抓取力仿真全流程解析

本文详细解析了Abaqus在气动软体抓取器仿真中的应用全流程,涵盖超弹性材料建模、接触设置优化到抓取力仿真等关键环节。通过实战案例分享Yeoh模型参数拟合、不可伸展层建模技巧及收敛优化策略,帮助工程师高效解决有限元仿真中的常见问题,提升软体机器人研发效率。

weixin_28689193的博客 237

工程级 RK3588 YOLOv5 Android 架构拆解:NPU 量化优化 + 多线程推理 + 跟踪算法源码

本文将带你完成一个完整的AI视觉项目:在搭载RK3588芯片的Android开发板上运行实时目标检测与跟踪应用。实战目标:成功运行官方YOLOV5摄像头实时检测案例技术深度:深入理解RKNN开发框架和源码实现核心技能:掌握NPU推理、多线程并发、目标跟踪等关键技术。

LXY_LOVE36的博客 128

找出水王 java_编程之美2.3笔记:寻找发帖“水王”

《编程之美》2.3:Tango是微软亚洲研究院的一个试验项目。研究院的员工和实习生们都很喜欢在Tango上面交流灌水。传说,Tango有一大“水王”,他不但喜欢发贴,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子总数的一半。如果你有一个当 前论坛上所有帖子(包括回帖)的列表,其中帖子作者的ID也在表中,你能快速找出这个传说中的Tango水王吗?当面试的时候我们遇到这样的问题,应...

weixin_30916461的博客 247

YOLO-V8训练自己的数据集之标注样本

四、标注样本 4.1、标注样本概述 4.1.1、样本标注主要方法 4.1.2、标注样本概念 4.1.3、标注样本实现方式 4.1.4、常见标注样本软件 4.2、标注工具LabelImg 4.2.1、LabelImg介绍 4.2.2、LabelImg特点 4.2.3、LabelImg安装方法 4.2.4、LabelImg使用方法 4.3、标注样本实操 4.3.1、安装标注软件Labelimg 4.3.2、Labelimg界面介绍 4.3.3、LabelImg实操过程中常

qq_29633789的博客 662

寻找发帖水王《算法很美》

寻找发帖水王 先看我上一篇哪个数超过了一半? 思路: 为什么要这样,为了防止{1,a,2,a,3,a,4,a,5,a}这种情况。如果不防止这种情况,就会两两不相同进行消除,所以int countOfLast = 0;增加了一个,让每一位元素都与最后一位元素进行比较 //变化,出现次数恰好为个数的一半,求出这个数 /*关于加强版水王的题我有个想法可以扫描一遍数组就解决问题 水王占总数的一半,说明总数必为偶然; 不失一般性,假设隔一个数就是水王,两两不同最后一定会消减为0

罗彬桦的博客 202

9、横向束流光学:原理、模拟与耦合效应

本文系统介绍了横向束流光学中的关键概念,包括色度、色散、发射度、动量压缩因子以及四维耦合效应。通过MATLAB代码详细演示了相关参数的计算与模拟流程,展示了粒子在加速器中的运动特性及其对束流稳定性的影响。同时,讨论了如何通过磁铁配置优化束流光学性能,为加速器的设计与优化提供了理论基础和实践指导。

resnet7explorer的博客 118

第14.1章 高翔博士2025年11月最新开源框架Lightning-LM源码学习解读(一):激光-IMU定位+建图算法各模块简介

Lightning-LM:高效激光SLAM定位系统 该框架基于模块化设计,通过激光-IMU融合实现快速建图与定位,核心特点包括: 极速性能:纯CPU运行(建图1.2核/定位0.8核) 模块化架构:包含激光里程计(LIO)、地图管理、回环检测等独立模块 动态场景支持:地图分块加载、动静态图层分离 多模式适配:支持ROS2环境下的在线/离线运行 关键模块包括前端里程计(core/lio)、2D/3D地图转换(core/g2p5)、轻量优化库(core/miao)等,通过系统控制器(core/system)协调流

行知SLAM 2438

编程之美----寻找发帖水王

编程之美----寻找发帖水王 题目:Tango是微软亚洲研究院的一个试验项目。研究院的员工和实习生们都很喜欢在Tango上面交流灌水。传说,Tango有一大“水王”,他不但喜欢发贴,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子总数的一半。如果你有一个当前论坛上所有帖子(包括回帖)的列表,其中帖子作者的ID也在表中,你能快速找出这个传说中的Tango水王吗? –《

chenglinhust的专栏 8411

【100分】【等和子数组最小和】

逆序排序,这样能够使得在分组时优先选取较大的元素,以便将元素分配到较小的子集中,从而使得每个子集的和相对均衡。给定一个数组nums,将元素分为若干个组,使得每组和相等,求出满足条件的所有分组中,组内元素和的最小值。分成若干个组,使得每组的和相等,并求出满足条件的所有分组中,组内元素和的最小值。在递归的过程中,我们需要注意一个优化点,即避免将相同和的桶重复计算。4 个子集(5),(1,4),(2,3),(2,3)2 个子集(5, 1, 4),(2,3, 2,3)个子集,则返回子集和的最小值,如果不能,则将。

weixin_54707168的博客 1168

数字之魅——寻找发帖水王

寻找发帖水王这个题目给了我很大的启发,同时开阔了视野,往往在解决这类型问题的时候第一想法都是先排序再计算。而本题却给出了一个非常好的思路,时间复杂度为O(N)。它还有一个扩展问题,但是我在网上看了几篇有的写的考虑不周全,有的写的逻辑不是很清楚,这里我也根据思考和查阅,给出我自己的解法。typedef int Type; //给出Id的一个抽象 Type candidate[3] = {0}; //说

奔跑的小河 877

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

编程之美之寻找发帖水王

简单来说就是求一个数组中出现次数超过一半的次数的数(保证存在),最容易想到的就是先排序,再返回中间位置的值。 优化方式就是每次删去两个不相等的数,最后找不到不相等的数,那么最后剩下的数就是这个出现次数超过一半的数。 考虑到每次寻找两个不相等的数比较困难,我们可以借助种思想换种写法。 用candidate代表当前候选的数,time次数,从头往后遍历,如果出现一次就time+1,不相等就time

fengsigaoju的博客 976

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

编程之美--寻找发帖水王

问题描述: Tango是微软亚洲研究院的一个试验项目。研究院的员工和实习生们都很喜欢在Tango上面交流灌水。传说,Tango有一大“水王”,他不但喜欢发贴,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子总数的一半。如果你有一个当前论坛上所有帖子(包括回帖)

rein07的专栏 1万+

寻找发帖水王java_编程之美之寻找发帖水王

简单来说就是求一个数组中出现次数超过一半的次数的数(保证存在),最容易想到的就是先排序,再返回中间位置的值。优化方式就是每次删去两个不相等的数,最后找不到不相等的数,那么最后剩下的数就是这个出现次数超过一半的数。考虑到每次寻找两个不相等的数比较困难,我们可以借助种思想换种写法。用candidate代表当前候选的数,time次数,从头往后遍历,如果出现一次就time+1,不相等就time-1如果ti...

weixin_42501848的博客 218

寻找发帖水王01

设计思想:   每次从ID列表中删除两个不同的ID,不影响“水王的ID在剩余ID中仍然超过一半”这一事实,因此每次删除两个不同的ID,直到剩下的所有ID都相同,那么剩下的就是水王的ID。不断重复这个过程,时间复杂度为O(n)。 具体实现:   具体编程的时候,使用一个candidate记录当前猜测的水王ID,一个count记录其累计次数,然后遍历整个ID列表,对于当前所考查的ID,如果和ca...

weixin_30911809的博客 78

寻找发帖水王java_2.3 寻找发帖水王

2.3 寻找发帖水王基础问题就是找到一个数组中超过一半的数字解法:vote 投票法sort 排序法import java.util.Arrays;class Test{public static void main(String[] args) {int[] arr = new int[]{1,2,3,4,5,4,4,4,4,4,4};System.out.println(mainNum(arr)...

weixin_29975633的博客 197
上一篇: 迭代一个单词中的每一个字符
下一篇: 数组循环移位
fighter_lp
博客等级 码龄14年 1粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值