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

方法1:Hash链表

方法2:使用两个变量A和B,其中A存储某个数组中的数,B用来计数。开始时将B初始化为0。

遍历数组,

如果B=0,则令A等于当前数,令B等于1;

如果当前数与A相同,则B=B+1;

如果当前数与A不同,则令B=B-1。

遍历结束时,A中的数就是要找的数。

这个算法的时间复杂度是O(n),空间复杂度为O(1)。

c语言描述:

int main()
{int i,A,B;int a[10]={1,2,3,1,2,1,1,6,1,1};A=a[5];B=0;
  for(i=0; i<10; i++)
  if(B=0){A = a[i];B =1;}elseif( A==a[i])B++;elseif(A!=a[i])B--;printf("%d", A);getchar();
  return 0;
}

转载于:https://www.cnblogs.com/ciangcic/p/3528218.html

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

  1. 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

    给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间. ...

  2. 已知2个整形数据a,b.不使用if,?:以及其他任何条件判断的语法,找出a跟b中数据的大者。

    已知2个整形数据a,b.不使用if,?:以及其他任何条件判断的语法,找出a跟b中数据的大者. 答案: int max(int a,int b) { return (a+b+abs(a-b))/2; } ...

  3. python步骤解析 给定一个整数数组和目标值_给定一个整数数组和一个目标值,找出数组中和为目标值的两个数 例如给定nums = [2,7,11,15],target = 9...

    python解决方案 nums = [1,2,3,4,5,6] #假如这是给定的数组 target = 9 #假如这是给定的目标值 num_list = [] #用来装结果的容器 def run(nu ...

  4. python数组分成两个和相等的子集_javascript,_动态规划——把一个整数数组分成两个和相等的子集,怎么写,javascript - phpStudy...

    动态规划--把一个整数数组分成两个和相等的子集,怎么写 当数组nums=[2,3,5]时,测试通过,但当nums=[5,3,2]时,测试就不能通过,这是为什么? window.onload = fun ...

  5. 返回数组个数Java_用java实现返回一个整数数组中最大数组的和

    今天研究了一下如何返回一个整数数组中最大数组的和,具体要求如下: 分析: 对于这个问题可以设定一个整型max,让他来充当子数组的和的最大值,之后就需要让他和所有的子数组进行比较,这里可以用两个for循 ...

  6. 算法--微软面试题:求一个整数数组元素间最小差值

    Q题目 有一个整数数组,请求出两两之差绝对值最小的值,记住,只要得出最小值即可,不需要求出是哪两个数. A解法 方案一:最愚笨的办法--暴力穷举 利用数组中所有数据两两相减的对比来求出这个最小差值. ...

  7. Java黑皮书课后题第7章:7.10(找出最小元素的下标)使用下面的方法头编写一个方法,求出一个整数数组中的最小元素下标。编写测试程序,提示用户输入10个数字,调用这个方法返回最小值的下标(多个则最小

    7.10(找出最小元素的下标)使用下面的方法头编写一个方法,求出一个整数数组中的最小元素下标.编写测试程序,提示用户输入10个数字,调用这个方法返回最小值的下标(多个则返回最小的下标) 题目 题目描述 ...

  8. Java黑皮书课后题第7章:7.9(找出最小元素)使用下面的方法头编写一个方法,求出一个整数数组中的最小元素。编写测试程序,提示用户输入10个数字,调用这个方法返回最小值,并显示这个最小值

    7.9(找出最小元素)使用下面的方法头编写一个方法,求出一个整数数组中的最小元素.编写测试程序,提示用户输入10个数字,调用这个方法返回最小值,并显示这个最小值 题目 题目描述与运行示例 破题 代码 ...

  9. 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。

    描述 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target. 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标.注意这里下标的范围是 0 到 n-1. ...

最新文章

  1. “蓝桥杯”软件大赛入门训练4道题
  2. C++走向远洋——26(项目二,2,构造函数与析构函数)
  3. 写给萌新们的Python安装及环境配置(anaconda,pycharm,GPU)教程
  4. C# Winform控件动态删除
  5. Axure谷歌浏览器Chrome扩展程序下载及安装方法
  6. linux 远程链接数据库报错host *** is not allowed to connect to this mysql server
  7. 无数老板做企业还在卖产品赚差价
  8. https访问报错404_电子口岸报关代理委托系统,出现“404”“503”报错怎么办?...
  9. Windows服务工程创建、部署
  10. 在哪里可以查询中国某一地区的历史气象数据(过去15年,如降雪,降雨等)?
  11. OSChina 周六乱弹 ——程序员想让对象一辈子跟你的秘籍
  12. 也就整了一万字的「数据指标体系」指南。
  13. window10吐槽
  14. 返利商城系统开发功能模式解析
  15. 在个人隐私方面做得比Google好的搜索引擎——DuckDuckGo
  16. go beego在apache服务器上域名配置 --小丑
  17. wap push简介
  18. hadoop集群平台的搭建
  19. 百度联盟与Google AdSense的比较
  20. 多级雷达图绘制python_Python 详解雷达图/蛛网图

热门文章

  1. 多校一道KMP+DP的题
  2. C++ new和malloc的区别
  3. UNIX(进程间通信):03---僵尸进程
  4. 判断微信小游戏用户是否真的分享
  5. 在Docker里面安装Ubuntu,并且使用ssh进行连接
  6. Java web后端5 JSP技术
  7. Zookeeper 终端命令
  8. 使用Lucid Virtu在有独立显卡的情况下使用Intel硬件加速H.264编码
  9. 解决:Request header field Content-Type is not allowed by Access-Control-Allow-Headers
  10. 开大你的音响,感受HTML5 Audio API带来的视听盛宴