当前位置: 首页 > news >正文

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

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

  • 原题链接:
  • 完成情况:
  • 解题思路:
  • 参考代码:
    • __378有序矩阵中第K小的元素__直接排序
    • __378有序矩阵中第K小的元素__归并排序
    • __378有序矩阵中第K小的元素__二分查找

原题链接:

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

https://leetcode.cn/problems/kth-smallest-element-in-a-sorted-matrix/description/

完成情况:

在这里插入图片描述

解题思路:

参考代码:

__378有序矩阵中第K小的元素__直接排序

package 西湖算法题解___中等题;import java.util.Arrays;public class __378有序矩阵中第K小的元素__直接排序 {public int kthSmallest(int[][] matrix, int k) {/*给你一个 n x n 矩阵 matrix ,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。请注意,它是 排序后 的第 k 小元素,而不是第 k 个 不同 的元素。*/int rows = matrix.length;   //行rowint cols = matrix[0].length;    //列colint sorted [] = new int[rows * cols];   //组合成一排数组,进行排序int index = 0;for (int row [] : matrix){      //每次获取matrix里的int row [] 数据for (int num : row){    //同时再在每一行row[]获取到每一个数sorted[index++] = num;}}Arrays.sort(sorted);return sorted[k-1];}
}

__378有序矩阵中第K小的元素__归并排序

package 西湖算法题解___中等题;import java.util.Comparator;
import java.util.PriorityQueue;public class __378有序矩阵中第K小的元素__归并排序 {public int kthSmallest(int[][] matrix, int k) {PriorityQueue<int []> priorityQueue = new PriorityQueue<int []>(new Comparator<int[]>() {@Overridepublic int compare(int[] a, int[] b) {return a[0] - b[0];}});//--------------------------------------------------------------------------int n = matrix.length;for (int i = 0;i<n;i++){priorityQueue.offer(new int[]{matrix[i][0],i,0});}//--------------------------------------------------------------------------for (int i = 0;i<k-1;i++){int  now [] = priorityQueue.poll();if (now[2] != n -1){priorityQueue.offer(new int[]{matrix[now[1]][now[2] + 1],now[1],now[2]+1});}}return priorityQueue.poll()[0];}
}

__378有序矩阵中第K小的元素__二分查找

package 西湖算法题解___中等题;public class __378有序矩阵中第K小的元素__二分查找 {public int kthSmallest(int[][] matrix, int k) {int n = matrix.length;int left = matrix[0][0];int right = matrix[n-1][n-1];while (left < right){int mid = left + ((right - left) >> 1 ) ;if (myCheck(matrix,mid,k,n)){right = mid;}else {left = mid + 1;}}return left;}private boolean myCheck(int[][] matrix, int mid, int k, int n) {int i = n-1;int j = 0;int num = 0;while (i >= 0 && j<n){if (matrix[i][j] <= mid){num += (i+1);j++;}else {i--;}}return num >= k;}
}
http://www.lryc.cn/news/121174.html

相关文章:

  • 商品首页(sass+git本地初始化)
  • Games101学习笔记 - MVP矩阵
  • 从零开始搭建个人博客网站(hexo框架)
  • vue的proxy代理详解
  • 计算机网络 ARP协议 IP地址简述
  • 2021年03月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 机器学习实战4-数据预处理
  • 项目管理师基础之项目管理计划和项目文件
  • 【单片机】DS2431,STM32,EEPROM读取与写入
  • c++11 标准模板(STL)(std::basic_stringbuf)(一)
  • flutter开发实战-WidgetsBinding监听页面前台后台退出状态
  • 父进程等待子进程退出 / 僵尸进程孤儿进程
  • 【LeetCode 75】第二十六题(394)字符串解码
  • UNIX网络编程——TCP协议API 基础demo服务器代码
  • [保研/考研机试] KY163 素数判定 哈尔滨工业大学复试上机题 C++实现
  • iOS_crash文件的获取及符号化(解析)
  • STM32定时器TIM控制
  • 网络请求中,token和cookie有什么区别
  • Javaweb_xml
  • http相关知识点
  • 【SA8295P 源码分析】68 - Android 侧用户层 输入子系统获取 /dev/input/event0 节点数据 代码流程分析
  • 走出迷宫(多组输入bfs)
  • Linux系统编程-终端、进程组、会话
  • Linux部分文件操作记录
  • Android系统-进程-Binder2-Java层
  • 体渲染原理及WebGL实现【Volume Rendering】
  • VUE3组件
  • 【iOS】autoreleasepool
  • 0基础学习VR全景平台篇 第80篇:Insta360 影石如何直播推流
  • 大语言模型之三 InstructGPT训练过程