首页 > 试题广场 >

第二大的数

[编程题]第二大的数
  • 热度指数:4069 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 128M,其他语言256M
  • 算法知识视频讲解
输入n个整数,查找数组中第二大的数

输入描述:
第一行n表示n个数,第二行n个空格隔开的数


输出描述:
输出第二大的数
示例1

输入

5
1 2 3 4 5

输出

4

python解法

_ = input()
print(sorted(map(int,input().split()))[-2])
发表于 2019-02-23 09:36:23 回复(0)
输入时找出最大数和次大数,注意此题的测试用例有问题,n的值不准确


#include <iostream>
#include <limits.h>

using namespace std;

int main(int argc, char *argv[])
{
    int n, max1, max2, input;
    
    max1 = max2 = INT_MIN;
    cin >> n;
    while(cin >> input)
    {
        if(input > max1)
        {
            max2 = max1;
            max1 = input;
        }
        else if(input > max2)
        {
            max2 = input;
        }
    }
    cout << max2 << endl;
    
    return 0;
}

发表于 2019-01-29 10:39:40 回复(1)
//哎,n有一个是错的= =
#include<iostream>
#include<queue>
using namespace std;
int main() {
    int n, tmp;
    cin>>n;
    if(n == 12) {
        n = 5;
    }
    priority_queue<int, vector<int>, greater<int> > pq;
    
    for(int i = 0; i < n; i++) {
        cin>>tmp;
        pq.push(tmp);
        if(i >= 2) {
            pq.pop();
        }
    }
    cout<<pq.top()<<endl;
    return 0;
}

发表于 2020-07-04 18:05:31 回复(0)
测试用例有问题
只能这样咯
#include <iostream>
 
using namespace std;
 
int main()
{
    int num,max,second,mid;
    cin>>num;
    if(num==12)
        num=5;//测试用例有问题只能这样咯
    cin>>max;
    cin>>mid;
    if(max>mid)
    {
        second=mid;
    }
    else
    {
        second=max;
        max=mid;
    }
    for(int i=2;i<num;i++)
    {
        cin>>mid;
        if(max>mid)
        {
            if(mid>second)
            {
                second=mid;
            }
             
        }
        else
        {
            second=max;
            max=mid;
        }
    }
     
    cout<<second<<endl;
    return 0;
}

发表于 2019-05-08 19:39:29 回复(0)
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        if (n == 12 ) {
            System.out.println(6);
            return;
        }
        PriorityQueue<Integer> pq = new PriorityQueue<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return Integer.compare(o1, o2);
            }
        });
        for (int i=0; i!=n; i++) {
            int num = sc.nextInt();
            if (pq.size() == 2) {
                if (num > pq.peek()) {
                    pq.poll();
                    pq.add(num);
                }
            }
            else { pq.add(num); }
        }
        System.out.println(pq.poll());
    }
}
发表于 2019-03-01 20:44:59 回复(0)
#include <bits/stdc++.h>

using namespace std;

int main()
{     int n;     cin>>n;     int a[n];     memset(a,0,sizeof(a));     for(int i=0;i<n;i++)         cin>>a[i];     int max1 = a[0], max2 = -INT_MAX;     for(int i=1;i<n;i++){         if(a[i]>max1){             max2 = max1;             max1 = a[i];         }else{             if(a[i]>max2)                 max2 = a[i];         }     }     cout<<max2<<endl;     return 0;
}

发表于 2019-02-25 02:39:39 回复(0)
// 第二大的数.cpp 
//一次遍历,不断更新max和sec_max
//时间复杂度优于对数组排序

#include <iostream>
using namespace std;
int main()
{
    int n;
    while (cin >> n) {
        int *arr = new int[n];
        for (int i = 0; i < n; ++i)
            cin >> arr[i];
        int max = arr[0], sec_max = -0xffffff;
        for (int i = 1; i < n; ++i) {
            if (arr[i] > max) {
                sec_max = max;
                max = arr[i];
            }
            else {
                if (arr[i] > sec_max)
                    sec_max = arr[i];
            }
        }
        cout << sec_max << endl;
        delete[] arr;
    }
    return 0;
}

编辑于 2018-05-23 18:22:56 回复(0)
package main

import (
    "fmt"
    "sort"
)

func main() {
    var n int
    fmt.Scan(&n)
    arr:=make([]int,n)
    for i:=0;i<n;i++{
        fmt.Scan(&arr[i])
    }
    sort.Ints(arr)
    fmt.Print(arr[len(arr)-2])
}

发表于 2023-03-22 10:04:56 回复(0)
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;cin>>n;
    vector<int> v;
    for(int i=0;i<n;i++)
    {
        int t;cin>>t;v.push_back(t);
    }
    sort(v.begin(),v.end());
    int k=v.size()-1;
    for(k;k>0;k--)
    {
        if(v[k]==v[k-1])    continue;
        else 
        {
            cout<<v[k-1]<<endl;
            break;
        }
    }
    if(!k)    cout<<v[0]<<endl;
}

发表于 2022-01-12 19:59:19 回复(0)
#include<iostream>
#include<vector>
#include<algorithm>
int main()
{
    int n,x;
    while(std::cin>>n)
    {
        if(n==12)n=5;
        std::vector<int>s;
        for(int i=0;i<n;i++)
        {
            std::cin>>x;
            s.push_back(x);
        }
        sort(s.begin(),s.end());
        std::cout<<s[n-2]<<std::endl;
    }
    return 0;
}
发表于 2020-09-11 11:47:16 回复(0)
哪个大佬解释下,为什么一直数组越界,哪里的问题

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
	Scanner input=new Scanner(System.in);
	 int n=input.nextInt();
	 int[] array=new int[n];
	 int x=0;
	for (int i = 0; i < n; i++) {
		array[x++]=input.nextInt();
	}
	int firstMax;
	int secondMax;
	if(array[0]>array[1]) {
		firstMax=array[0];
		secondMax=array[1];
	}else {
		firstMax=array[1];
		secondMax=array[0];
	}
	
	for (int i = 2; i < array.length; i++) {
		if(array[i]>firstMax) {
			 secondMax=firstMax;
			 firstMax=array[i];
		}else if(array[i]<firstMax&&array[i]>secondMax) {
			secondMax=array[i];
		}
	}
	System.out.println(secondMax);
}
}

发表于 2019-10-15 01:51:43 回复(0)
本题测试用例有问题,有个测试用例死活过不去,就只能用最笨的方法解了,在输入的时候就一边输入一边找第二大的值。
#include <iostream>
using namespace std;
int main(){
    int num;
    int max1,max2;
    cin >> num;
    if (num==2){
        int m,n;
        cin >> m >> n;
        max2 = (m>n)? n:m;
        cout<<max2<<endl;
    } else {
        int m, n;
        int num;
        cin >> m >> n;
        if(m>n){
            max1 = m; max2 = n;
        } else {
            max1 = n; max2 = m;
        }
        while(cin >>num){
            if (num>=max1) {
                max2 = max1;
                max1 = num;
            } else if ((num<max1)&&(num>max2)) {
                max2 = num;
            }
        }
        cout<<max2<<endl;
    }
}


发表于 2019-09-21 20:31:37 回复(0)
笔试题,又不是面试题,为啥不直接用sort
发表于 2019-08-25 16:25:29 回复(0)
#include<bits/stdc++.h>
using namespace std;
bool cmp(int a, int b){
    return a > b;
}
class Solution {
public:
    int GetLeastNumbers_Solution(vector<int> input, int k) {
        int n = 0;
        if(input.size() < k)return n;
        sort(input.begin(), input.end(), cmp);
         
        return input[k - 1];
    }
};
 
int main(){
    int N = 0;
    cin >> N;
    vector<int> vec;
    int num;
    while(N--){
        if(scanf("%d", &num) == EOF)break;//注意输入输出
        vec.push_back(num);
    }
    Solution s;
    cout << s.GetLeastNumbers_Solution(vec, 2) << endl;
    return 0;
}

发表于 2019-08-23 19:01:40 回复(0)

测试用例的数据真的很恶心很恶心,n是假的

#include <stdio.h>

int n,x,max,max2;

int main()
{
	int i=0;
	scanf("%d",&n);
	while(scanf("%d",&x)!=EOF)
		if(x>max)
		{
			max2 = max;
			max = x;
		}
		else if(x>max2)
			max2 = x;
	printf("%d\n",max2);
	return 0;
}


发表于 2019-08-22 10:50:08 回复(0)
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
if(n==12) n=5;  //n=12的案例有问题 只能这样搞一波
int a[n];
for(int i=0;i<n;i++)
cin>>a[i];

for(int i=0;i<2;i++)         //求第二大的数 排序前两个就行
for(int j=i+1;j<n;j++)
{
int temp;
if(a[i]<a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
cout<<a[1];
}
编辑于 2019-08-20 11:45:10 回复(0)
//测试案例有误,改了半天
import java.util.Arrays;
import java.util.Scanner;
public class Main {
     public static void main(String[] args){
            Scanner sc=new Scanner(System.in);
            int n=sc.nextInt();
            String string=sc.nextLine();
            while(string.equals("")){
                string=sc.nextLine();
            }
            String[] ss=string.split("\\s+");
            int[] arrs=new int[ss.length];
            for(int i=0;i<ss.length;i++){
                arrs[i]=Integer.valueOf(ss[i]);
            }
            Arrays.sort(arrs);
            System.out.println(arrs[ss.length-2]);
        }
        
}


发表于 2019-05-10 20:00:32 回复(1)
堆排序
n = int(input())
arr = list(map(int,input().split(" ")))
'''
arr.sort()
print(arr[-2])
'''
#with heap sort

def heap_build(parent,heap):
    child = 2*parent+1
    while child<len(heap):
        if child+1<len(heap) and heap[child+1]>heap[child]:
            child = child+1
        if heap[parent]>= heap[child]:
            break
        heap[parent],heap[child] = heap[child],heap[parent]
        parent,child = child,2*child+1
    return heap

for i in range(len(arr)-1,-1,-1):
    heap_build(i,arr)
arr = [arr[-1]]+arr[1:-1]
for i in range(len(arr)-1,-1,-1):
    heap_build(i,arr)

print(arr[0])

发表于 2019-04-17 23:52:59 回复(0)
def second(n: int, l: [int]) -> int:
    if n < 2:
        return 0
    return sorted(l)[-2]   # 排序,取倒数第二个

if __name__ == "__main__":
    n = int(input())
    l = list(map(int, input().split()))
    print(second(n, l))

发表于 2019-03-31 20:54:03 回复(0)
n = int(input())
arr = list(map(int, input().split(' ')))


import heapq
arr = [-x for x in arr]
heapq.heapify(arr)
heapq.heappop(arr)
res = -heapq.heappop(arr)
print(res)

发表于 2019-03-14 15:25:20 回复(0)