列表

详情


OR107. 有序矩阵中第K小的元素

描述

给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。
请注意,它是排序后的第k小元素,而不是第k个元素。

示例:

matrix = [
   [ 1,  5,  9],
   [10, 11, 13],
   [12, 13, 15]
],
k = 8,

返回 13。
说明: 
你可以假设 k 的值永远是有效的, 1 ≤ k ≤ n2 。

输入描述

第一行为k的值和矩阵的n的值

后续为n*n矩阵的数字,以空格分割

输出描述

矩阵中第k小的元素

示例1

输入:

8 3
1 5 9
10 11 13
12 13 15

输出:

13

原站题解

C 解法, 执行用时: 1ms, 内存消耗: 228KB, 提交时间: 2020-05-20


#include<stdio.h>
int main(void){
    int n,i,j,k,temp;
    scanf("%d",&k);
    scanf("%d",&n);
    int M[n*n];
    for(i=0;i<n*n;i++){
        scanf("%d",&M[i]);
    }
    for(i=0;i<=n*n-1;i++){
       for(j=i;j<=n*n-1;j++) {
        if(M[j]<M[i]){
            temp=M[j];
            M[j]=M[i];
            M[i]=temp;
          }
       }
    }
    printf("%d",M[k-1]);
}

C 解法, 执行用时: 1ms, 内存消耗: 228KB, 提交时间: 2019-12-10

#include<stdio.h>
int main(void){
    int n,i,j,k,temp;
    scanf("%d",&k);
    scanf("%d",&n);
    int M[n*n];
    for(i=0;i<n*n;i++){
        scanf("%d",&M[i]);
    }
    for(i=0;i<=n*n-1;i++){
       for(j=i;j<=n*n-1;j++) {
        if(M[j]<M[i]){
            temp=M[j];
            M[j]=M[i];
            M[i]=temp;
          }
       }
    }
    printf("%d",M[k-1]);
}

上一题