算法--找出数组中出现次数超过一半的数

输入n个整数,输出出现次数大于等于数组长度一半的数 题目:输入n个整数,输出出现次数大于等于数组长度一半的数 输入描述: NOWCODER.COM 牛客网·互联网名企笔试/面试题库 牛客出品-http://www.nowcoder.com 每个测试输入包含 n个空格分割的n个整数,n不超过100,其中有一个整数出现次数大于等于n/2。 输出描述: 输出出现次数大于等于n/2的数。 示例1: 输入 3 9 3 2 5 6 7 3 2 3 3 ... 阅读详情

算法--找出数组中出现次数超过一半的数

作者:陈太汉

算法--找出数组中出现次数超过一半的数
     每当我看到经典的算法题,就怀念高中,感觉很多算法题就是高中的题目,谁叫哥只读了个专科,高数基本相当没学。
     有空要看看高数啊,想当年数学那是相当的......


#include <iostream>
using namespace std;
class FindTheOne
{
public:
  方法一
  第一个想到的方法是见一个二维数组,一维存数组中的数据,二维存这个数出现的次数。出现次数最多的那个数就是要找的那个数
  由于某个数出现的次数超过数组长度的一半,所以二维数组的长度只需要这个数组的一半。代码实现如下,
  当然这个方法很糟糕,时间复杂度和空间复杂度都比较大,想练手的我还是写了一下。

  

方法一

方法二
     将数组排序,最中间的那个数就是您要找的数。
     如果出现最多的那个数是最小的,那么1至(n+1)/2都是那个数
     如果出现最多的那个数是最大的,那么(n-1)/2至n都是那个数
     如果不是最小也不是最大,当这个数由最小慢慢变成最大的最大的数时,你会发现中间的那个数的值是不变的。
     综上所述,中间的那个数就是你要找的那个数。
     时间复杂度就是你排序用的时间。排序真的不想写了(可以参考《我的另一篇博客》)。大家都知道排序还是相当费时的,当然这个方法还是不太好。

 方法三
     这个方法借用了别人的思路。
     在这里我做一下简单的分析。
     这个算法的时间复杂度是O(n),另外用了两个辅助变量。
     k用于临时存储数组中的数据,j用于存储某个数出现的次数。
     开始时k存储数组中的第一个数,j为0,如果数组出现的数于k相等,则j加1,否则就减1,如果j为0,就把当前数组中的数赋给k
     因为指定的数出现的次数大于数组长度的一半,所有j++与j--相抵消之后,最后j的值是大于等于1的,k中存的那个数就是出现最多的那个数。

    下面这个算法只适合数组中数组中某个数的出现次数超过数组长度一半的数组,符合题意。

方法三
复制代码
int Search( int A[], int len)
{
if (NULL == A || len <= 0 )
{
return - 1 ;
}

int k, j = 0 ;
for ( int i = 0 ;i < len; ++ i)
{
if (j == 0 )
{
k
= A[i];
}
if (k == A[i])
{
++ j; // 有人说++j比j++有先天的优势,不知你是否听说,如果你也听说,有没有想过More Effective C++(C++程序员必看书籍)
} else
{
-- j;
}
}

return k;
}
复制代码

};


silvaco——GaN HEMT探索 上图为输出特性曲线 ,分别是在栅压为1v、3v、5v的情况下,可以看出在1v时器件处于截止状态,只有非常小近似于0的电流通过,随着栅压逐渐增大,沟道开启,产生漏极电流。上图为栅极漏电流曲线和转移特性曲线以及其提取的参数,可以看到阈值电压为=1.30249V,当栅压为0v时,Id=8.01032e-006,当栅压为5V时,Ig=3.11627e-006。albrct.n,低场迁移率模型,bn.albrct,an.albrct是albrct模型中的参数,可以由用户自己设定。lat.temp,晶格自热模型; 阅读详情

相关推荐

RAGFlow源码解析-2、从源码构架ragflow v0.25.0镜像

本文详细记录了从零开始构建自定义RAGFlow镜像lt/ragflow:0.25.0的全过程。首先介绍了环境准备,包括检查Node.js、Docker版本和项目结构。然后详细说明了构建步骤:编译前端、创建自定义Dockerfile、构建镜像和验证。接着讲解了docker-compose配置修改要点,包括网络定义、MySQL依赖处理等。最后总结了部署过程中遇到的五个关键问题及解决方案,包括networks未定义、MySQL服务依赖、tiktoken文件缺失、数据库配置错误和端口映射问题。通过完整的操作流程和问

liutao841204的专栏 364

数组中出现次数超过一半的数字-C++-牛客BM51

一、题目 给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。 数据范围:n≤50000,数组中元素的值 0≤val≤10000 要求:空间复杂度:O(1),时间复杂度 O(n) 输入描述: 保证数组输入非空,且保证有解 示例1 输入:[1,2,3,2,2,2,5,4,2] 返回值:2 二、思路 在解题之前,首先要了解一个

TLJava^v^的博客 992

交流异步机VVVF变频控制simulink/matlab仿真分析

VVVF,是Variable Voltage and Variable Frequency的缩写, 意为:可变电压、可变频率,也就是变频调速系统。 VVVF控制的逆变器连接电机,通过同时改变频率和电压,达到磁通恒定(可以用反电势/频率近似表征)和控制电机转速(和频率成正比)的目的,所以多应用在变频器中,属于工业自动化领域。

Ezekiel_Mok的博客 4209

算法-找数组中出现次数超过一半的数

1. 找出数组中出现次数超过一半的数 给定数组,要求找出数组中出现次数超过数组长度一半的数。 2. 解法解法: 方法一:先将数组中的元素排序,由于目标元素的数量超过数组长度的一半,故排序后数组的中间元素(即数组的中位数)就是目标元素。 时间复杂度O(nlogn) 方法二:构造一个hashmap,key为元素的值,value为元素出现的次数,然后遍历hashmap就可以找到目标元素了。 时间复杂度...

谈谈1974 3024

RADIOML 2018.01A调制信号数据集介绍及处理

RadioML 2018.01A 由 DeepSig 发布,是专门针对自动调制识别(Automatic Modulation Recognition, AMR)和无线信号分类研究设计的基准数据集。它在原有 RadioML 2016.10a 的基础上,扩展并精细化了信道仿真模型,使得信号更接近真实无线环境下的表现。该数据集广泛用于机器学习模型的训练与评估,为各类深度学习算法提供了统一、可重复的实验条件。

weixin_56527269的博客 1885

BAPI创建委外采购订单

使用BAPI BAPI_PO_CREATE1创建委外采购订单,组件为手工输入时,有几个点需要注意: 1、已通过CS01创建过BOM的物料,创建时会自动带出components。如果要修改当前组件清单,可以通过设置pocomponents-change_id = 'E’来实现 lv_sline = lv_sline + 1. ls_pocomponents-po_item = l_ebelp + 10. ls_pocomponents-ITEM_NO = l

Buffalo_soldier的博客 3260

出现次数超过一半的数字

题目描述 题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。 分析与解法 一个数组中有很多数,现在我们要找出其中那个出现次数超过总数一半的数字,怎么找呢?大凡当我们碰到某一个杂乱无序的东西时,我们人的内心本质期望是希望把它梳理成有序的。所以,我们得分两种情况来讨论,无序和有序。 解法一 如果无序,那么我们是不是可以先把数组中所有这些数字先进行排序(至

qisefengzheng的专栏 总有一天你将破蛹而出 895

CKAD-CN考试之路----12

显然,对应的value都已经实现了加密.保存退出,等待pod重新创建。确认secret是否被加密。编辑secret文件。

Q先生 446

数组中出现次数超过一半的数字

题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 基本思路是比较计数,依次从头遍历这个数组,当发现有和这个元素相等的时候,计数器++,当发现计数器大于一半的时候,表示找到了,立刻返回这个数,否则继续遍历。无解的时候情况最差,最差时间复杂度为O(n^2),当存在解的时候,会比较快跳出循环(取决于解的位置,最差为n*n/2),最快为O(n

weixin_41579872的博客 438

基于 transformer、lstm、LSTM多特征的交通流量预测 完整数据代码 超全项目 本科硕士毕设卓卓有余

基于 transformer、lstm、LSTM多特征的交通流量预测 完整数据代码 超全项目 本科硕士毕设卓卓有余

4655

多标签图像分类:标签依赖关系建模的最新论文解读与实战应用

多标签图像分类:标签依赖关系建模的最新论文解读与实战应用 ,人工智能,计算机视觉,大模型,AI,本文解读了最新相关论文,包括基于图神经网络(GCN)的ML-GCN方法,通过构建标签相关矩阵建模依赖关系;区域潜在语义依赖的RLSD模型,定位关键区域并利用RNN建模语义依赖;以及语义图表示学习的SSGRL框架,结合语义解耦与交互模块。通过实战应用,展示了基于PyTorch的ML-GCN模型实现,包括图像特征提取、标签依赖建模及训练评估流程,为多标签图像分类提供了有效解决方案。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 18万+

一道算法题:找出数组中出现次数超过一半的数

原题如下: 找出数组中出现次数超过一半的数,现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数。 这道题在网上已经有了很多种解法,如果先排序在查找,那么n/2这个位置一定就只要找的这个数字,但是排序的复杂度已经超过O(n)了。用hash_map和一些高空间占用的算法就不说了,现在说另一个思路,是利用这个数出现次数超过一半这个特性。 虽然也看到

Coder 2352

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

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

java 算法之找出数组中出现次数超过一半的数

1、具体思路为:为了求出现次数超过一半的数,我们可以用java 中的HashMap集合,用key存储数组中具体元素,value存储该元素出现的次数。如果集合中还没有该元素,即:!map.containskey(arry[i]) 则把该元素出现次数记为1,否则在之前次数上加1。之后用for循环遍历该集合,如果map1.getValue>num,则可以用map1.getKey取出这个出现次数超过一半的数。 2、源代码为: public static void main(String[] arg.

weixin_54951878的博客 744

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数...

现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数。   算法:充分利用出现次数超过一半这个特点,使用两个变量candidate和vote,分别代表候选人和票数,遍历数组 按如下方式投票和更换候选人:   若当前数与候选人一样,则把候选人的票数加1 若当前数与候选人不一样, 则把它的票数减1,如果减掉后票数小于0,则把候选人踢掉,用当前数作为新的候...

The time is passing 517

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数

<br />现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数。<br /> <br />答案1: <br />创建一个hash_map,key为数组中的数,value为此数出现的次数。遍历一遍数组,用hash_map统计每个数出现的次数,并用两个值存储目前出现次数最多的数和对应出现的次数。 <br />这样可以做到O(n)的时间复杂度和O(n)的空间复杂度,满足题目的要求。 <br />但是没有利用“一个数出现的次数超过了一半”这个特点。也许算法还有提高的空间。 <br

afa的专栏 3445

现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数。

现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数。 分析:设数A出现次数超过一半。每次删除两个不同的数,在剩余的数中,数A出现的次数仍超过一半。通过重复这个过程,求出最后的结果。这个题目与编程之美中寻找水王相同

剑飞的专栏 1037

算法--找出数组中出现次数超过一半的数 作者:陈太汉

作者:陈太汉 算法--找出数组中出现次数超过一半的数 每当我看到经典的算法题,就怀念高中,感觉很多算法题就是高中的题目,谁叫哥只读了个专科,高数基本相当没学。 有空要看看高数啊,想当年数学那是相当的...... #include <iostream> using namespace std; class FindTheO...

weixin_34104341的博客 145

php 数组出现最多的数,PHP实现找出数组中出现次数超过数组长度一半的数字算法示例...

本文实例讲述了PHP实现找出数组中出现次数超过数组长度一半的数字算法。分享给大家供大家参考,具体如下:* 算法要求:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。** 算法分析:我们需要计算数组中每个数字的出现次数。在PHP中我们可以使用in_array函数* 来判断一个元素是否出现在数组中。比如数组中含有1,2,3三个元素,我们要判断1是否存在* 可以使用in_array(1,$...

weixin_35588980的博客 187

现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数

<br /> <br />现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数。<br />方法1:Hash链表<br />方法2:使用两个变量A和B,其中A存储某个数组中的数,B用来计数。开始时将B初始化为0。 <br />遍历数组,<br />如果B=0,则令A等于当前数,令B等于1;<br />如果当前数与A相同,则B=B+1;<br />如果当前数与A不同,则令B=B-1。<br />遍历结束时,A中的数就是要找的数。 <br />这个算法的时间复杂度是O(n),

albon arith 3825

现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数。...

现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数。 分析:设数A出现次数超过一半。每次删除两个不同的数,在剩余的数中,数A出现的次数仍超过一半。通过重复这个过程,求出最后的结果。这个题目与编程之美中寻找水王相同 #include<iostream> using namespace std; //size为数组A的大小 //返回数组中出现超过一...

weixin_30532987的博客 159
上一篇: Architecting Microsoft® .NET Solutions for the Enterprise
下一篇: 一个数组存放了2n+1个整数,其中有n个数出现了2次,1个数出现了1次,找出出现1次的数是多少?
DSIslander
博客等级 码龄20年 14粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值