面试训练数组中出现次数超过一半的数字
来源:互联网 发布:汉字翻译拼音软件 编辑:程序博客网 时间:2024/05/16 08:42
题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。
第一种思路 当然是如果无序的话,先排序O(n logn),然后O(n)遍历数组
第二种思路 当然是取哈希,key为数字,value为出现数字,然后o(n)遍历哈希表
海涛思路
就是只判断前后两个元素的关系,重复利用数组的特性,一个数字出现的次数超过了数组长度的一半。
那么我遍历数组 当后面元素和前面不同 我就计数减1,若相同那么则计数加1,可以知道,最后一个使得计数值从负数变为正数的就是最大值
#include "stdio.h"int findMostNum(int *data,int len){int flag =0;int i;int last,times;last = data[0];times=1;for(i=1;i<len;i++){flag =times;if(times == 0){last = data[i];times=1;}else if(data[i] == last){times+=1;}else{times-=1;}}times =0;for(i=0;i<len;i++){if(data[i] == last){times++;}}if(times*2<=len){return -1;}return last;}int main(){int data[]={1,2,5,7,2,2,5,2,6,2,2,2,2,9};int temp,len;len = sizeof(data)/sizeof(data[0]);temp = findMostNum(data,len);printf("%d\n",temp);return 0;}据说算法导论有中位数,我还是看看,这个海涛的解决还是感觉有点不太容易想明白
- 面试训练数组中出现次数超过一半的数字
- 面试29: 数组中出现次数超过一半的数字
- 数组中超过出现次数超过一半的数字
- 74.数组中超过出现次数超过一半的数字
- 74 数组中超过出现次数超过一半的数字
- 【数组4】数组中出现次数超过一半的数字
- 数组4:数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字的算法 程序员面试47
- 面试算法(二十八)数组中出现次数超过一半的数字
- 数组中超过出现次数一半的数字 【微软面试100题 第七十四题】
- 面试-剑指offer-数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字
- 找出数组中出现次数超过长度一半的数字
- 2-数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字[算法]
- 数组中出现次数超过一半的数字
- 找出数组中出现次数超过一半的数字--百度
- matlab拟合工具箱
- final static
- 我在北京!(4)——转来献给草根程序员的励志文章
- 流年,经不起怀念
- 电子商务关键数字优化(线上部分,下)转自:数码林博客 原文引自:
- 面试训练数组中出现次数超过一半的数字
- struts登录注册页面
- OCP-043 When the execution of a resumable statement is suspended
- 实现sharepoint 内容编辑器直接上传图片功能
- HDU 4026--Unlock the Cell Phone(状态压缩)
- MultiThreadedHttpConnectionManager类
- 30个基于jQuery的日期时间选择插件
- 餐桌上的“爱心菜”
- CXF WebService整合Spring