求出整形数组中第二大的数的值

 1 int findsecond(int a[], int size)
 2 {
 3     int max = a[0];
 4     int second = a[1];
 5     int index = 0;
 6     for (int i = 0; i < size; ++i)
 7     {
 8         if (max < a[i])
 9         {
10             second = max;
11             index = i;
12             max = a[i];
13         }
14         else if (max > a[i])
15         {
16             if (second < a[i])
17             {
18                 second = a[i];
19                 index = i;
20             }
21             else if (second > a[i])
22             {
23                 if (second == max)
24                 {
25                     second = a[i];
26                     index = i;
27                 }
28             }
29         }
30     }
31
32     return second;
33 }

index为第二大的数在数组中的下标;

在写算法的过程中,验证发现如果去掉第21行~第28行,

当初始化max和second相等且为整个数组最大,

即a[0]和a[1]相等且为数组最大时,

求出的第二大的数值会出错。

由此发现,去掉上述几行后,max和second初始化为相等且数组最大时,

此算法的结果都会出错,所得结果为最大的数。

特此记录

时间: 2024-10-26 19:33:36

求出整形数组中第二大的数的值的相关文章

找出一个整形数组中第二大的数字

如何在时间复杂度为O(n)内找出数组中第二大的数字? 通过设置两个变量,一个保存最大值,一个保存第二大值,通过在找最大值的过程中,原来的最大值逐渐变为第二大值.一种实现代码如下(Java版): 1 /** 2 * 在时间复杂度为O(n)内找出数组的第二大的数字 3 * @author JiaJoa 4 * 5 */ 6 public class Algorithm_GetSecondMax { 7 8 public static void main(String[] args) { 9 // T

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

1.最容易想到的办法 我们可以用最简单的办法来找到一个数组中任意大小的数字,那就是按照某一个排序方式将数组的所有元素进行排序,然后按需取出来就可以,知识这种方式的时间复杂度和空间复杂度比较大,所以,有了下面这种方式 2.通过设置两个变量来进行判断 这种方式可以只通过一遍扫描数组即可找到第二大数,具体的形式如下:先定义两个变量:一个变量用来存储数组的最大数,初始值为数组首元素,另一个变量用来存储第二大的数,初始值为最小负整数,然后遍历数组元素,如果数组元素的值比最大数变量还大,更新最大数:若数组元

python找出数组中第二大的数

#!usr/bin/env python #encoding:utf-8 ''''' __Author__:沂水寒城 功能:找出数组中第2大的数字 ''' def find_Second_large_num(num_list):   '''''   找出数组中第2大的数字   '''   #直接排序,输出倒数第二个数即可   tmp_list=sorted(num_list)   print 'Second_large_num is:', tmp_list[-2]   #设置两个标志位一个存储最

如何使用一次for循环得到数组中第二大的数

装载声明:http://blog.csdn.net/lxsmk9059/article/details/77920206?locationNum=1&fps=1 1 int array[] = {1,12,58,369,45,17,59,3654,370}; 2 int max = array[0]; 3 int secondmax = array[0]; 4 5 for(int i = 0; i < sizeof(array)/sizeof(int); i++) 6 { 7 if(arra

剑指Offer(Java版)第四十题:在数组中的两个数字,如果前面一个数字大于后面的数字, 则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。 并将P对1000000007取模的结果输出。 即输出P%1000000007

/*在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000000007 */ import java.util.*; public class Class40 { public int InversePairs(int[] array){ int length = array.length; int P = 0; for(int i = 0; i < lengt

求数组中第二大的值

/* 所有c语言代码,都是在LoadRunner中运行: */Action(){ int a[]={12,34,565,23,24,667,89,98};//定义一个int数组: int len;//记录数组元素个数: int max;//所求的最大值: int max_2;//第二大的值: int i;//循环变量:LoadRunnerg中,不能在for循环中定义变量: len = sizeof(a)/sizeof(int);//数组元素个数=数组所占字符数/数组元素类型所占字符数; max

找出有序数组中绝对值最小的数

问题: 一个有序数组,值有可能有负值,也有可能没有,现需要找出其中绝对值最小的值. 方法1: 遍历数组,找到绝对值最小值,时间复杂度O(n),n为元素个数. 方法2: 二分查找,因为数组有序,可以利用二分查找,时间复杂度O(logn). 分析步骤: 如果第一个数为正数,说明整个数组没有负数,直接返回第一个数 如果最后一个数为负数,说明整个数组没有正数,直接返回最后一个数 数组元素有正有负,说明绝对值最小的元素肯定在正负数交界处,需要二分查找上场: 如果a[mid]<0,因为数组是升序,说明绝对值

关于两数组,求出两数组中相同的的对象

1:平常的操作 (直接同for循环) let a = [{ id: '1', name: '1' }, { id: '2', name: '2' }, { id: '3', name: '2' }] let b = [{ id: '3', name: '3' }, { id: '1', name: '1' } ] let c = [] //定义一个接受相同数组的数组 let num = 0 for (let item of a) { num++ for (let items of b) { nu

编写一个程序,求出整数数组中最小元素的下标。如果这样的元素个数大于1,则返回下标最小的数的下标。

int[] num = new int[]{5,6,1,4,3,6,7,8,92,6};  int min = num[0];  int n = 0;  for (int i = 0; i < num.length; i++) {   if(num[i]<min){    min = num[i];    n = i;   }     }  System.out.println("最小數的下标为:" + n);