列表

详情


OR111. 查找第K大的元素

描述

给定一个无序的整型数组A[n],数组大小大于等于3,允许有值相同的元素;请设计算法找到该数组排序后第三大的元素值并输出.

输入描述

一个非空的整数数组(至少有3个元素,可正可负)

输出描述

第三大的元素值

示例1

输入:

[1,2,3,4,5]

输出:

3

示例2

输入:

[1,1,2,2,3]

输出:

2

示例3

输入:

[6,5,4,4,1,2]

输出:

4

原站题解

C 解法, 执行用时: 1ms, 内存消耗: 376KB, 提交时间: 2020-07-30

#include <stdio.h>

int main()
{
    char c;
    int A[1000];
    int count=0;
    int k=0;
    scanf("%c",&c);
    while(c!=']')
    {   
        scanf("%d",&A[count]);
        count++;
        scanf("%c",&c);
    }
    
    for(int i=0;i<2;i++)
    {
        for(int j=0;j<count;j++)
       {
        if(A[j]>A[k])
           k=j;
        
       }
          A[k]=-300;
    }  
    for(int j=0;j<count;j++)
    {
        if(A[j]>A[k])
           k=j;
        
    }
       //printf("%d",A[k]);
    printf("%d",A[k]);
    
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 296KB, 提交时间: 2021-12-26

#include <stdio.h>

int main() {
	char c;
	int array[500];
	int count = -1;
	scanf("%c", &c);
	while (c != ']')
	{
		count++;
		scanf("%d", &array[count]);
		scanf("%c", &c);
	}

	int temp=0;
	for (int i = 0; i < count; i++)
	{
		for (int j = i + 1; j <= count; j++)
		{
			if (array[i] > array[j])
			{
				temp = array[i];
				array[i] = array[j];
				array[j] = temp;
			}
		}
	}
	printf("%d", array[count - 2]);
	return 0;
}

上一题