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
- C 在行有序的矩阵中找出第k大的元素
- [Google] 矩阵行列都有序,求矩阵中第K大的数
- 数组中找出第二个最大的元素(第k大的元素)
- 有序数组a,b,找出a,b(合并为一个大的有序数组后)中第k个数
- 两个有序数组的第k大的元素
- 找出大数组array中第k大的元素(要求时间复杂度O(1))
- 快速找出第K大的元素 (快速排序)
- 找出数组中的第K大的元素
- 通过划分的方式在线性时间内找出一个序列中第K大的元素
- 两个有序数组中找中位数或者第K大的元素
- 数组试题---两个有序数组中第K大的元素
- 两个有序数组中找中位数或者第K大的元素
- 利用快排思想找出数组中第k大的元素
- 数组中第K大的元素
- 两个有序数组中,寻找第K大的数
- 找出第k个最小的元素
- 数组中找出第k大的值
- 找出数组中第K大的数值
- JavaScript建立接口的方式(二)之属性检测接口实现方式
- 方立勋_30天掌握JavaWeb_JDBC、SQL防注入(一)
- Shader编程学习笔记(一)—— 图形硬件简史与可编程管线
- 树的相关算法
- XMU 1050 Diffuse Secret 【最短路】
- C 在行有序的矩阵中找出第k大的元素
- RecyclerView 分割线
- 【C语言】一道结合顺序的问题
- 面试总结一
- Python模块包中__init__.py文件的作用
- PHP/MySQL中的localhost和127.0.01
- 51nod 1019 逆序数(树状数组)
- Linux-文件操作(open、write、read、close、iotcl)
- 面试算法