Binary Search - 378. Kth Smallest Element in a Sorted Matrix
时间:2022-07-25
本文章向大家介绍Binary Search - 378. Kth Smallest Element in a Sorted Matrix,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
378.Kth Smallest Element in a Sorted Matrix
Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth smallest element in the matrix.
Note that it is the kth smallest element in the sorted order, not the kth distinct element.
Example:
matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15] ], k = 8,
return 13.
Note: You may assume k is always valid, 1 ≤ k ≤ n2.
思路:
题目意思是在一个从左到右有序,从上到下有序的矩阵当中找到第 K 小的数,这道题目可以用堆来做,不过题目说的很明显,提示矩阵有序,那就可以考虑使用二分法来做,就是通过 mid 定位到从(0,0)到 mid 的总数和 k 来做二分,如果说计算的总数比 k 小,那么就往后搜索,否则就往前搜索。
代码:
go:
func kthSmallest(matrix [][]int, k int) int {
if matrix == nil || len(matrix) == 0 {
return -1
}
m := len(matrix)
n := len(matrix[0])
l := matrix[0][0]
r := matrix[m-1][n-1]
for l < r {
mid := l + (r - l) / 2
if countGreater(matrix, mid) >= k {
r = mid
} else {
l = mid + 1
}
}
return l
}
func countGreater(a [][]int, k int) int {
n := len(a)
count := 0
i := 0
j := n - 1
for i < n && j >= 0 {
if a[i][j] > k {
j--
} else {
count += j + 1 // +1 because it's zero based indexing
i++
}
}
return count
}
- 学界 | OpenAI 发布稀疏计算内核,更宽更深的网络,一样的计算开销
- 【手把手教你做项目】自然语言处理:单词抽取/统计
- Kaggle赛题解析:逻辑回归预测模型实现
- R语言 使用BP神经网络进行银行客户信用评估
- 使用R语言挖掘QQ群聊天记录
- 解析滴滴算法大赛---GBDT进行数据预测
- 数据迁移中的数据库检查和建议(r2笔记71天)
- 决策树案例:基于python的商品购买能力预测系统
- 数据迁移前的准备和系统检查 (r2笔记70天)
- 数据处理的统计学习(scikit-learn教程)
- 机器学习实战,使用朴素贝叶斯来做情感分析
- Python NLTK 处理原始文本
- 通过闪回事务查看数据dml的情况 (r2笔记69天)
- 通过shell和sql结合查找性能sql(r2笔记68天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法