`
liukexiong
  • 浏览: 83753 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

寻找数组中第二大数

阅读更多
/*
 * 写一个函数找出一个整数数组中,第二大的数(microsoft)
 * 要求效率尽可能高
 */
#include<stdio.h>
#include<stdlib.h>

int find(int *a,int n)
{
	int i=1;
	int second=*(a+i);
	while(i<n)
	{
		if(*(a+i)>second)second=*(a+i);
		i++;
	}
	return second;
}

int findsecondmaxvalue(int *a,int n)
{
	int i=0;
	int first=*(a+i);
	int second=*(a+i);
	while(i<n)
	{
		if(*(a+i)>first)
		{
			second=first;
			first=*(a+i);
		}
		else if(*(a+i)==first)
		{
			//do nothing
		}
		else if(*(a+i)<first&&*(a+i)>second)
		{
			second=*(a+i);
		}
		else
		{
			//do nothing
		}
		i++;
	}
	//最大值和次大值相等(只可能出现在数组的第一个元素)
	if(first==second)
	{
		second=find(a,n);
	}
	return second;
}

int main()
{
	int a[]={9,5,1,7,4,6,2,3,8};
	int n=sizeof(a)/sizeof(a[0]);
	int second=findsecondmaxvalue(a,n);
	printf("次大值=%d\n",second);
}

 

分享到:
评论
2 楼 爱在爪哇 2012-05-21  
基偶双冒泡可以解决。
1 楼 hubeen 2011-02-25  
思路一:
最大值=array[0],次大值=array[1],遍历一次,每次比较并更新次大和最大值。最后可以第二大值,适用于前N大问题,N非常小的情况。
思路二:
middle=array[0],把所有小于middle的移动到middle左边。如果middle的index=1,第二大值=middle。否则在0到middle.index-1之间递归第一个过程。适合前N大问题,N不是非常小的情况。
思路三:
把array构造为最小堆,取第二次为第二大值。适合前N大问题,N不是非常小的情况。

相关推荐

    如何寻找数组中的第二大数

    本篇文章是对如何寻找数组中的第二大数进行了详细的分析介绍,需要的朋友参考下

    matlab算法查找数组中第二大数:空间换时间的改进算法、分治策略的改进算法

    1.顺序比较算法的核心思想是遍历两次数组A,第一次找到最大值及其位置,第二次找到第二大值及其位置。通过比较当前元素与最大值和第二大值的大小关系,来更新相应的变量。 2.将一次比较视为一场比赛。在一次比较中,...

    寻找第二大的数

    在数组中寻找第二大的数,是比较次数最少的算法

    LeetCode解题总结

    1.3 寻找两个排序数组的中位数 1.4 最长连续序列 1.5 累加和 1.6 移除数组中指定值 1.7 下一个排列 1.8 第n个全排列 1.9 验证数独的正确性 1.10 容纳雨水的量 1.11 旋转图像 1.12 数字加1 1.13 爬楼梯 1.14 格雷码 ...

    西工大noj答案完整版.doc

    2.A+B 3.A+BⅡ 4.AB 5.ACKERMAN 6.Arithmetic Progressions 7.Bee 8.Checksum algorithm 9.Coin Test 10.Dexter need help 11.Double 12.Easy problem 13.Favorite number 14.Graveyard 15.Hailstone 16.Hanoi Ⅱ 17...

    leetcode卡-Competitive-Programming:我创建这个存储库来存储我从一些在线法官那里得到的问题的解决方案

    获取第二大数 正则表达式匹配 重复字符串(待提交) 袜子一双(待提交) 第一个非连续号码(待提交) 交替案例 信用卡面具 删除元素 按长度对数组进行排序 验证信用卡号 删除重复的单词 计算字符串中的字符数 数组...

    leetcode530-fundamentals:算法和数据结构的基础课程

    leetcode 530 算法和数据结构的基础课程 使用 Kadene 算法的最大子阵列问题 ...在旋转排序数组中查找元素 BST 是否对称(左右半边是镜像) 从 PRE-ORDER 构建 BST 给定数字范围的按位与 两个排序数组的中位数 最大平方

    《你必须知道的495个C语言问题》

    第2章 结构、联合和枚举 21 结构声明 21 2.1 struct x1{ };和typedef struct{ }x2; 有什么不同? 21 2.2 这样的代码为什么不对?struct x{ }; x thestruct; 22 2.3 结构可以包含指向自己的指针吗? 22 ...

    你必须知道的495个C语言问题

    第2章 结构、联合和枚举 结构声明 2.1 structx1{ };和typedefstruct{ }x2;有什么不同? 2.2 这样的代码为什么不对?structx{ };xthestruct; 2.3 结构可以包含指向自己的指针吗? 2.4 在C语言中用什么...

    ACM巨全模板 .pdf

    5.主席树(静态求区间第k小) (区间中小于k的数量和小于k的总和) (区间中第一个大于或等于k的值) 6.权值线段树 (求逆序对) 7.动态主席树 (主席树+树状数组) (区间第k大带修改) 8.树上启发式合并 (查询子树的优化) 9,...

    浙江大学ACM模板 计算几何,图论,数据结构,经典题的模板

    1.16.8 pku_2600_二分+圆的参数方程 74 1.16.9 pku_1151_矩形相交的面积 76 1.16.10 pku_1118_共线最多的点的个数 78 1.16.11 pku2826_线段围成的区域可储水量 80 1.16.12 Pick公式 84 1.16.13 N点中三个点组成...

    易语言程序免安装版下载

    修改BUG:超级列表框在属性“整行选择”为真时,鼠标单击第一列右面也会导致第一列中的选择框被选中或取消选中。 21. 修改BUG:Sqlite3数据库支持库中“Sqlite数据库.取错误文本()”返回的文本是UTF-8编码(应是GB...

    1345个易语言模块

    二进制到三十六进制.ec 互 联网扩展模块1.1.ec 互联网扩展模块1[1].1.ec 五笔编码查询模块.ec 代码编辑器部分模块.ec 仿 vista截图.ec 仿WinXP窗口v3.1版.ec 仿XP界面3.0特别版模块 3.0.ec 仿XP窗口2.0.ec 仿 真...

    1350多个精品易语言模块

    二进制到三十六进制.ec 互 联网扩展模块1.1.ec 互联网扩展模块1[1].1.ec 五笔编码查询模块.ec 代码编辑器部分模块.ec 仿 vista截图.ec 仿WinXP窗口v3.1版.ec 仿XP界面3.0特别版模块 3.0.ec 仿XP窗口2.0.ec 仿 真...

Global site tag (gtag.js) - Google Analytics