长度为n的数组,有一个数重复出现了n/2+1次,找出(三种方法)
问题:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h> int fun(int inp[],int size)
{
assert(inp!=NULL && size>);
int i=,j=;
for(;i<size-;i++){
int sum = ;
for(j=i+;j<size;j++){
if(inp[i]==inp[j]) sum++;
}
if(size/+ == sum) return inp[i];
}
return -;
} int main(){
int input[]={,,,,,,,,,};
int ret = fun(input,);
printf("result = %d\n",ret);
return ;
}
结果如下:
[root@admin Desktop]# ./a.out
result =
[root@admin Desktop]#
#include <stdlib.h>
#include <stdio.h>
#include <assert.h> int fun(int inp[],int size)
{
assert(inp != NULL && size>);
int i=,j=;
for(;i<size-;i++){//外循环,保证每个数都被遍历到
printf("i==:%d\n",i);
if(- == inp[i]) continue;//外循环遇到-1时,证明该数被选中并剔除过
else{
printf("in else ==:\n");
for(j=i+;j<size;j++){ //内循环,从i往后寻找与inp[i]不同的且不为-1的元素;
if(inp[i] != inp[j] && - != inp[j]){
printf("j==:%d\n",j);
inp[i]=inp[j]=-;//找到后都置为-1
break;
}
if(size- == j) return inp[i];//如果j走到头都没找到,证明剩下的都与inp[i]重复
}
}
}
return -;//失败,返回-1
} int main()
{
int input[] = {,,,,,,,,,};
int ret = fun(input,);
printf("the number is:%d\n",ret);
return ;
}
结果:
[root@admin Desktop]# ./a.out
i==:
in else ==:
j==:
i==:
i==:
in else ==:
j==:
i==:
i==:
in else ==:
j==:
i==:
i==:
in else ==:
j==:
i==:
i==:
in else ==:
the number is:
[root@admin Desktop]#
1.若当前数的值与候选人candidate一样,则把候选人的票数加1;
2.若当前数与候选人不一样,则把它的票数减1,如果减掉后票数小于0,则把候选人踢掉,用当前数作为新的候选人;
3.最后剩下的候选人就是出现次数超过一半的数。
算法的正确性证明: 数组中,数值相同的数都会投赞成票,数值不同的都会投反对票,有一个数出现的次数超过一半,其它数得到的反对票必然大于一半,所以其它数中,任何一个得票都会小于0,遭到淘汰。剩下来的只能是超过一半的那个数。
#include <stdlib.h>
#include <stdio.h>
#include <assert.h> int fun(int inp[],int size)
{
assert(inp != NULL && size>);
int i=,candidate=inp[],vote=;
for(;i<size;i++){
printf("i = %d; candidate is:%d; vote=%d\n",i,candidate,vote);
if(inp[i] == candidate) vote++;
else{
vote--;
if(vote < ){
candidate = inp[i];
vote = ;
}
}
}
return candidate;
} int main()
{
int input[] = {,,,,,,,,,};
int ret = fun(input,);
printf("the number is:%d\n",ret);
return ;
}
结果:
[root@admin Desktop]# ./a.out
i = ; candidate is:; vote=
i = ; candidate is:; vote=
i = ; candidate is:; vote=
i = ; candidate is:; vote=
i = ; candidate is:; vote=
i = ; candidate is:; vote=
i = ; candidate is:; vote=
i = ; candidate is:; vote=
i = ; candidate is:; vote=
i = ; candidate is:; vote=
the number is:
[root@admin Desktop]#
长度为n的数组,有一个数重复出现了n/2+1次,找出(三种方法)的更多相关文章
- (PASS)JAVA数组去重 三种方法 (不用集合)
第一种方法(只学到数组的看): 定义一个新的数组长度和旧数组的长度一样,存储除去重复数据的旧数组的数据和0, package demo01; import java.sql.Array; import ...
- 数组k平移三种方法(java)
上代码,本文用了三种方法实现,时间复杂度不一样,空间复杂度都是o(1): public class ArrayKMove { /** * 问题:数组的向左k平移,k小于数组长度 * @param ar ...
- js二维数组定义和初始化的三种方法总结
js二维数组定义和初始化的三种方法总结 方法一:直接定义并且初始化,这种遇到数量少的情况可以用var _TheArray = [["0-1","0-2"],[& ...
- php将数组写入到文件的三种方法
php将数组原样写入或保存到文件有三种方法可以实现, 第一种方法是使用serialize, 第二种方法是使用print_r, 第三种方法是使用var_export, 本文章向大家介绍这三种方法是如何将 ...
- php数组合并有哪三种方法
php数组合并有哪三种方法 一.总结 一句话总结:array_merge():array_merge_recursive():‘+'号 $a = array('color'=>'red',5,6 ...
- 输入n个数组,数组长度不等,每个数组取出一个数进行组合,求出所有的组合。
转载声明:原文转自http://www.cnblogs.com/xiezie/p/5511707.html 昨天晚上,有个朋友找到我,他在用matlab编程,但是遇到一个问题,解决不了. 问题如下: ...
- 0..n去掉一个数,给你剩下的数,找出去掉的那个数
转载请注明转自blog.csdn.net/souldak , 微博@evagle 首先,考虑没有去掉那些数,如果n是奇数,n+1个最低位肯定是0101...01,count(0)=count(1),如 ...
- python3的leetcode题,两个数求和等于目标值,返回这两个数的索引组成的列表(三种方法)
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为gai目标值的 两个 整数. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素. 示例: 给定 ...
- 前端面试题1:Object.prototype.toString.call() 、instanceof 以及 Array.isArray()三种方法判别数组的优劣和区别
1. Object.prototype.toString.call() 每一个继承 Object 的对象都有 toString 方法,如果 toString 方法没有重写的话,会返回 [Object ...
随机推荐
- Unit Test Via Visual Studio
转载Unit Test Via Visual Studio-Part1 写在开头:Coding ain't done until all the tests run. No unit test no ...
- 使用Visual Studio创建映像向导(Image Sprite)——Web Essential
原版的:Creating Image Sprite in Visual Studio - Web Essential 译者注:有关图片精灵的信息请參阅http://baike.baidu.com/vi ...
- MVC使用Bootstrap
ASP.NET MVC使用Bootstrap系列(5)——创建ASP.NET MVC Bootstrap Helpers 摘要: 序言ASP.NET MVC允许开发者创建自定义的HTML Helper ...
- linux cat
cut是一个选取命令,就是将一段数据经过分析,取出我们想要的.一般来说,选取信息通常是针对“行”来进行分析的,并不是整篇信息分析的. (1)其语法格式为:cut [-bn] [file] 或 cut ...
- [Unity3D]Unity3D游戏开发之刀光剑影特效的实现
大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei. 我实在不明确有的人为什么不喜欢武侠/仙侠类游戏,也许是因为武侠/仙侠类游戏身上被永远烙上的国 ...
- Magicodes.NET框架
Magicodes.NET框架之路——让代码再飞一会(ASP.NET Scaffolding) 首先感谢大家对Magicodes.NET框架的支持.就如我上篇所说,框架成熟可能至少还需要一年,毕竟 ...
- 关于phpcms中模块_tag.class.php中的pc_tag()方法的含义
关于phpcms中模块_tag.class.php中的pc_tag()方法的含义: 在phpcms系统中自己写后台模块,要在前台模板中显示出来须要在\phpcms\modules\自定义 ...
- 探讨css中repaint和reflow
(个人blog迁移文章.) 前言: 页面设计中,不可避免的需要浏览器进行repaint和reflow.那到底什么是repaint和reflow呢.下面谈谈自己对repaint和reflow的理解,以及 ...
- 高德地图教程_poi搜索和显示
通过高仿深圳的应用近期打算.UI我们已经做了,我见过APP查询界面.关闭网络也将是能够查询其指示数据被存储在数据库中,或者是第一网络,所有网站上的数据是好了.我想简单地使用查询地图提供了. 曾经是接触 ...
- 初探Django线程发送邮件
最近一直在纠结一个邮件发送的问题. 在本地Linux下搭建程序,不填写EMAIL设置就可以成功发送邮件,在远端的云服务器下的Linux环境就发送不了.在windows下搭建的程序也不能发送注册邮件,很 ...