首页 > 试题广场 >

写一个函数找出一个整数数组中,第二大的数

[问答题]
写一个函数找出一个整数数组中,第二大的数
推荐
xxj头像 xxj
int Find_Second_Max(int data[],int n)
{
    if(n<2) return -1;
    int max_num = max(data[0],data[1]);
    int sec_num = min(data[0],data[1]);
    for(int i=2;i<n;i++)
    {
        if(data[i]>=max_num);
        {
            sec_num = max_num;
            max_num = data[i];
        }
        else if(data[i] > sec_num)//排除等于情况
            sec_num = data[i];
    }
    return sec_num;
}
编辑于 2015-02-10 11:31:01 回复(1)
const int MINNUMBER = -32767 ;
int find_sec_max( 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 ;

发表于 2015-08-10 10:03:57 回复(0)
int max1 = a[0],max2 = a[0];
for(int i = 0;i <n;i++){
    if(a[i]<max1 && a[i]>max2){
        max2 = a[i];
    }else if(a[i]>max1){
        max1 = a[i];
    }
}
就是比较大小而已,不要想复杂了
发表于 2020-04-16 17:43:48 回复(0)
核心代码只有7行,手写不累。
 max1 = max2 = array[0];
 for( int i=0; i<5; i++)
{
     if(array[i] > max2) 
    {
             if(  array[i] > max1  ) 
             {
               max2 = max1;
              max1 = array[i];
             }  
             else max2 = array[i];       
    }
}

发表于 2019-04-13 14:08:44 回复(0)
1)类似于找出前n大的数,可以用数组实现堆排序;是logn
2)然后第一行是最大的数是s【0】,第二行s【1】,s【2】,中最大的就是second;是1;
这样总复杂度是logn


发表于 2016-03-29 12:32:46 回复(0)
//先用快速排序进行排序
void qucikSort(int a[],int low,int high){
    if(a==null || low > high)
        return ;
    int key = a[low];
    int first = low;
    int last = high;
    while(first<last) {
        while(first<last && a[last] > key )
            last--;
       a[first] = a[last];
        while(first<last && a[first] < key)
            first++;
        a[last] = a[first];
}
    a[first] = key;
    qucikSort(a,low,first-1);
    qucikSort(a,first+1,high);
}
//找出第二大的数字
int findSecondMax(int a[]){
    if(a==null) return -1;
    int low = 0;
    int high = a.length-1;   
    qucikSort(a,low,high);
    return a[high-2];
}

编辑于 2015-04-23 10:46:59 回复(0)
#include <stdio.h>



int main(  ) {
    
    int a[10000]={0},i=0,max,smax;
    while(scanf("%d",&a[i++])!=EOF && a[i-1]!=-1)
        
    max=a[0];
    smax=a[1];
    for(i=1;i<100;i++){
        if(a[i]>max){
            smax=max;
            max=a[i];
        }
        else if(a[i]>smax){
            smax = a[i];
        }
    }
    printf("%d",smax);
    
    return 0;
}
发表于 2019-08-14 19:10:08 回复(0)
def fun(arr):
    max=0;
    max2=0;
    for item in arr:
        if item>max:max=item
        if item<max and item>max2:max2=item
    return max2
发表于 2019-04-01 19:56:17 回复(0)
#include<stdio.h>
int main(){
int a[100],n;
int i,max1,max2;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a[i]); 
if(a[0]>a[1]){
max1=a[0];
max2=a[1];
}else{
max1=a[1];
max2=a[0];
}
for(i=2;i<n;i++){
if(a[i]>max1){
max2=max1;
max1=a[i];
}
else{
if(a[i]>max2){
max2=a[i];
}
}
}
printf("%d\n",max2);
return 0;
发表于 2017-03-17 10:56:00 回复(0)
#include<stdlib.h>
#include<stdio.h>
int find_second_max(const int arr[], int length){
    int max, second;
    int i;

    if(length < 2) {
        printf("The size of array should be bigger than 2\n");
        exit(-1);
    }
    arr[0] > arr[1] ? (max = arr[0], second = arr[1]) : (max = arr[1], second = arr[0]);
    for(i = 2; i < length; i++){
        if(arr[i] > max){
            second = max;
            max = arr[i];
        } else if(arr[i] > second){
            second = arr[i];
        }
    }
    return second;
}
         

发表于 2016-12-26 16:22:58 回复(0)
int findnum(int *array){



    for(int i = 0; i < ){

}
        return num;

}

发表于 2016-09-18 17:06:57 回复(0)
function getSecond(arr){ //返回数组中第二大的数,注意边界条件
  if(Object.prototype.toString.call(arr).slice(8,-1)==='Array'){
    var arr1=arr.sort(function(a,b){
      return b-a;
    });
    for(var i=1;i<arr1.length;i++){
if(arr[i] !=arr1[0]){
return arr[i];
}
}
return arr[i+1];
  }
}
var arr=[23,43,232,3,23,232,12,3,232,232]
console.log(getSecond(arr));

发表于 2016-08-31 14:20:32 回复(0)
int FindSecondLargeNumber(int a[],int len){
   
}


发表于 2016-07-09 22:36:46 回复(0)

int Find_second_max(int *arr,int len)
{
 int max=arr[0];
 int second_max=max;
 for (int i=0;i<len;i++)
 {
  if(arr[i]>second_max)
  {
     if(arr[i]<max)
     {
     second_max=arr[i];
     }
     second_max=max;
     max=arr[i];
  }
 }
 return second_max;
}

int main()
{
 int arr[16]={19,2,3,43,5,6,7,89,97,10,15,12,13,14,65,16};
 int second_max=Find_second_max(arr,sizeof(arr)/sizeof(arr[0]));
 printf("%d\n",second_max);
 return 0;

}

发表于 2015-08-22 23:16:36 回复(0)
<p> <br /> public class SecondMaxNum { </p> <p> &nbsp;public static void main(String[] args) {<br /> &nbsp;&nbsp;int[] arr = {3,5,7,89,45,123,4};<br /> &nbsp;&nbsp;System.out.println(getSecondMaxNum(arr)); </p> <p> &nbsp;} </p> <p> &nbsp;private static int getSecondMaxNum(int[] arr) {<br /> &nbsp;&nbsp;if (arr == null || arr.length == 0) {<br /> &nbsp;&nbsp;&nbsp;System.exit(0);<br /> &nbsp;&nbsp;}<br /> &nbsp;&nbsp;int max = arr[0];<br /> &nbsp;&nbsp;int sec_max = Integer.MIN_VALUE;<br /> &nbsp;&nbsp;for (int i = 1; i &lt; arr.length; i++) {<br /> &nbsp;&nbsp;&nbsp;if (arr[i] &gt; max) {<br /> &nbsp;&nbsp;&nbsp;&nbsp;sec_max = max;<br /> &nbsp;&nbsp;&nbsp;&nbsp;max = arr[i];&nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp;}else {<br /> &nbsp;&nbsp;&nbsp;&nbsp;if (sec_max &lt; arr[i]) {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sec_max = arr[i];<br /> &nbsp;&nbsp;&nbsp;&nbsp;}<br /> &nbsp;&nbsp;&nbsp;}<br /> &nbsp;&nbsp;}<br /> &nbsp;&nbsp;return sec_max;<br /> &nbsp;} </p> <p> &nbsp;<br /> } </p>
发表于 2015-08-17 22:31:52 回复(0)
int find(vector<int> data){
    if(data.size()<2)
         return -1;
    sort(data.begin(),data.end(),greater<int>());
    return data[1];
}

发表于 2015-08-10 21:15:08 回复(0)
int secondLarge(int[] arr,int length){
    int[] temp = new int[2];
    temp[0] = arr[0];
    temp[1] = arr[1];
    for(int i = 2;i<length;i++){
            //只要是比两个数其中一个大,就替换出小的那个
           if(arr[i]>temp[0] || arr[i]>temp[1]){
                if(temp[0]>temp[1])
                        temp[1] = arr[i];
                else
                        temp[0] = arr[i];
        }
    }  
    return temp[0]>temp[1] ? temp[0]:temp[1];  
}
发表于 2015-08-08 21:10:45 回复(0)
堆排 用make_heap logN
发表于 2015-07-25 16:56:07 回复(0)
#include <iostream>
int fun(int *data,int len)
{
 int max = data[0];
 int min = -2147;
 for(int i = 1;i <len; i++)
 {
  if(data[i] >max)
  {
   min = max;
   max = data[i];
  }
  else  if(data[i]>min) min = data[i];
 }
 return min;

}
int main()
{
 int a[5] = {1,6,5,3,8};
 std::cout<< fun(a,5)<<std::endl;

}

发表于 2015-07-22 15:44:28 回复(0)
int getSecondMax(int [] a){
    
        if(a.length()<2)
        {
            return -1;
        }
        
        int max_second;
        int max;
        if(a[0]<a[1]){
            max =  a[1];
            max_second = a[0];
        }
        for(int i=2;i<a.length();i++)
        {
            if(a[i]>max_second&&a[i]< max )
            {
                max_second = a[i];             
            }else if(a[i]> max)
            {               
                max_second = max;
                max = a[i];  
            }
        }
        return max_second;
}
发表于 2015-06-10 11:33:41 回复(0)
//写一个函数找出一个整数数组中,第二大的数
#include <stdio.h>
int FindTwoMax(int a[],int len)
{
 int first=0;
 int k = 0;
 int second=0; 
 for(int i=0;i<len;i++)
    {
    	if(a[i]>first)
        {
       		 first=a[i];
       		 k=i;
        }
    }  
 for(int j=0;j<len;j++)
 {
 if(a[j]>second)
   	{ 
 if(k==j)continue;
     	second=a[j];
   	}
 }
 return second;
}
int main()
{
 int ar[]={1,13,3,8,2};
 int a=FindTwoMax(ar,5);
 printf("second=%d",a);
 return 0;
}


发表于 2015-04-16 00:22:38 回复(0)