C 在行有序的矩阵中找出第k大的元素

来源:互联网 发布:软件代理商 编辑:程序博客网 时间:2024/05/21 13:06
  • 题目描述
    这里写图片描述

  • 分析
    初看这道题,找出第k大的元素,一个简单直接的方法就是排序。因为矩阵的每行都是有序的,可以考虑归并排序。

    这是一种解题思路,有没有其他方法呢?
    有,应用二分搜索。

    我们换个角度来思考这个问题,把问题想象成找出一组数的第k大元素。那我可以对半(随机)找(猜)哇,先来一个值,看小于这个值的数有多少,不够(k-1)的话,那这个值就是设小了,我们放大一点(怎么放大?应用二分搜索的思想)重新数数;反之,若是超过了k个,那就是值设大了,我们缩小一点,再重新数数。

  • 代码实现

int kthSmallest(int** matrix, int matrixRowSize, int matrixColSize, int k) {    int mid,left,right;    int count=0;    right=matrix[matrixRowSize-1][matrixColSize-1];    left=matrix[0][0];    while(left<right){        mid=(right+left)/2;        count=0;        for(int i=0;i<matrixRowSize;i++){             int j=0;             while(j<matrixColSize&&matrix[i][j]<=mid){                 count++;                 j++;             }        }        if(count<k)            left=mid+1;        else            right=mid;    }    return left;}
0 0
原创粉丝点击