如何找出一个数组中第二大的数
2014-03-12 11:47
190 查看
思路分析:
可以只通过一遍扫描数组即可找出数组中第二大的数,即通过设置两个变量来进行判断。首先定义一个最大变量来存储数组的最大值,初始值为数组首元素;另一个是第二大变量,用来存储数组中的第二大数,因其一定不能超过数组中的最大值,所以初始值可设为最小负整数-32767,然后遍历数组元素。如果数组元素的值比最大变量的值大,则将第二大变量的值更新为最大变量的值,最大变量的值更新为该元素的值;如果数组元素的值比最大变量的值小,则判断该数组元素的值是否比第二大变量的值大,如果大,则更新第二大变量的值为该数组元素的值。
代码如下:
效果如图:
可以只通过一遍扫描数组即可找出数组中第二大的数,即通过设置两个变量来进行判断。首先定义一个最大变量来存储数组的最大值,初始值为数组首元素;另一个是第二大变量,用来存储数组中的第二大数,因其一定不能超过数组中的最大值,所以初始值可设为最小负整数-32767,然后遍历数组元素。如果数组元素的值比最大变量的值大,则将第二大变量的值更新为最大变量的值,最大变量的值更新为该元素的值;如果数组元素的值比最大变量的值小,则判断该数组元素的值是否比第二大变量的值大,如果大,则更新第二大变量的值为该数组元素的值。
代码如下:
#include "stdafx.h" #include <stdio.h> const int MINNUMBER = -32767; int FindSecMax(int data[], int count) { int maxnumber = data[0]; int sec_max = MINNUMBER; for (int i = 1; i < count; i++) { if (data[i]>maxnumber) { sec_max = maxnumber; maxnumber = data[i]; } else { if (data[i] > sec_max) sec_max = data[i]; } } return sec_max; } int main() { int array[] = { 2, 5, 6, 7, 7, 8, 98, 3, 458, 5, 6 }; int length = sizeof(array) / sizeof(array[0]); printf("%d\n", FindSecMax(array, length)); getchar(); return 0; }
效果如图:
相关文章推荐
- 如何找出一个数组中第二大的数
- 如何快速找出一个数组中最大数和第二大数
- 不排序找出一个数组中的第二大的数
- 快速找出一个数组中的最大数、第二大数
- indexOf() 如何判断一个元素在指定数组中是否存在? 找出指定元素出现的所有位置? indexOf()方法 是正序查找,lastIndexOf()是倒叙查找
- [基础题]1.快速找出一个数组中的最大数、第二大数。
- 写一个函数找出一个整数数组中,第二大的数
- 写一个函数找出一个整数数组中,第二大的数
- 给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱). 第二解
- 快速找出一个数组中的最大数和第二大数
- C++通过自定义函数找出一个整数数组中第二大数的方法
- 写一个函数找出一个整数数组中,第二大的数
- 一个1~n的自然数的乱序数组,其中缺失了1到n之间的某个数,如何快速找出这个数?
- 如何找出数组中第二大的数?(一道面试算法题的思考)
- 一个整型数组里除了一个数字之外,其他的数字都出现了两次。要求时间复杂度是O(n),空间复杂度是O(1),如何找出数组中只出现一次的数字
- 写一个函数找出一个整数数组中,第二大的数
- 写一个函数找出一个整数数组中,第二大的数
- 找出一个整数数组中第二大的数
- 整数数组中,每个元素均出现两次,除了一个元素例外,如何找出这个元素?能否设计一个线性时间的算法,且不需要额外的存储空间?
- J2EE面试题之 java如何找出一个int数组中出现次数最多的数字以及出现次数?