java数据结构与算法刷题-----LeetCode378. 有序矩阵中第 K 小的元素

这篇具有很好参考价值的文章主要介绍了java数据结构与算法刷题-----LeetCode378. 有序矩阵中第 K 小的元素。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846

java数据结构与算法刷题-----LeetCode378. 有序矩阵中第 K 小的元素,算法,java,矩阵,算法,leetcode

解题思路
  1. 已知矩阵相对有序,可以用二分搜索,不过和一维数组排序不同,这是二维的
  2. 每一行都递增,每一列也是递增,所以每一行的最后一个元素都是当前行最大的。每一列的最下面元素也都是当前列最大的
  3. 所以,随便划分一个矩形区域,左上角都是最小的元素,右下角都是最大的元素。
  4. 此时就有了两个边界,让我们来找到这个区域的最大值和最小值的中间值(不一定是矩阵中的元素)。然后判断,矩阵中元素谁比这个中间值小。只需要判断每行的后面的元素即可,因为每行递增排序,最后面的一定是最大的,如果最后一个比mid中间值小,那么这一行都比它小,如果倒数第2个元素比mid小,那么这一行前面的元素,一直从前往后到倒数第二个都比mid小。
    java数据结构与算法刷题-----LeetCode378. 有序矩阵中第 K 小的元素,算法,java,矩阵,算法,leetcode
    java数据结构与算法刷题-----LeetCode378. 有序矩阵中第 K 小的元素,算法,java,矩阵,算法,leetcode
    java数据结构与算法刷题-----LeetCode378. 有序矩阵中第 K 小的元素,算法,java,矩阵,算法,leetcode
    java数据结构与算法刷题-----LeetCode378. 有序矩阵中第 K 小的元素,算法,java,矩阵,算法,leetcode
代码:时间复杂度O( n ∗ l o g 2 r − l n*log_2{r-l} nlog2rl),二分查找进行次数为 O( l o g 2 r − l log_2{r-l} log2rl),每次操作时间复杂度为 O(n). 空间复杂度O(1)

java数据结构与算法刷题-----LeetCode378. 有序矩阵中第 K 小的元素,算法,java,矩阵,算法,leetcode文章来源地址https://www.toymoban.com/news/detail-817400.html

class Solution {
    public int kthSmallest(int[][] matrix, int k) {
        int rows = matrix.length;//行数
        int cols = matrix[0].length;//列数
        int l = matrix[0][0];//左上角元素
        int r = matrix[rows-1][cols-1];//右下角元素
        while(l < r){//如果满足"小的" 不大于 "大的",就可以继续循环
            int mid = l + (r-l)/2;//找到他俩的中位数
            int count = checkValue(matrix, mid);//获取这个数在数组所有元素排好序后,它的相对位置
            if(count < k){//如果这个数比目标值k小,说明我们应该在mid元素的右下区域找
                l = mid+1;
            } else {//否则在mid元素的左上区域找
                r = mid;
            }
        }
        return l;//最终,二分区域只剩一个元素或没有元素
    }

    public int checkValue(int[][] matrix, int mid){
        int r = 0;//行下标
        int c = matrix[0].length-1;//列下标
        int count = 0;//计数
        while(r< matrix.length && c >= 0){//如果行下标和列下标不越界就继续
            if(matrix[r][c] <= mid){//如果当前元素比mid小
                r++;//行需要进行下移,继续判断
                count += (c+1);//既然下移了一行,那么就统计一行的元素,一行有c+1列,就有c+1个元素需要统计
                //因为数组下标从0开始,c是当前二分区域的最后一列的下标,所以有c+1列
            } else {//如果当前元素比mid还大,就说明没有我们要找的元素,让列前移一列
                c--;
            }
        }
        return count;//最终返回有几个元素比mid小。
    }
}

到了这里,关于java数据结构与算法刷题-----LeetCode378. 有序矩阵中第 K 小的元素的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • java数据结构与算法刷题-----LeetCode766. 托普利茨矩阵

    java数据结构与算法刷题-----LeetCode766. 托普利茨矩阵

    java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完): https://blog.csdn.net/grd_java/article/details/123063846 解题思路 这道题只要换一种理解方式,瞬间就会变的很简单。 题目描述是每个元素左上和右下对角线元素都相同。但是,我们发

    2024年01月25日
    浏览(10)
  • java数据结构与算法刷题-----LeetCode667. 优美的排列 II

    java数据结构与算法刷题-----LeetCode667. 优美的排列 II

    java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完): https://blog.csdn.net/grd_java/article/details/123063846 解题思路 题目要求我们返回一个数组长度为n的数组,必须含有1~n的所有数,并且从左到右,相邻的元素依次相减,它们的差,必

    2024年01月25日
    浏览(13)
  • java数据结构与算法刷题-----LeetCode209. 长度最小的子数组

    java数据结构与算法刷题-----LeetCode209. 长度最小的子数组

    java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完): https://blog.csdn.net/grd_java/article/details/123063846 解题思路 代码:时间复杂度O(n).空间复杂度O(1)

    2024年01月21日
    浏览(47)
  • java数据结构与算法刷题-----LeetCode96. 不同的二叉搜索树

    java数据结构与算法刷题-----LeetCode96. 不同的二叉搜索树

    java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完): https://blog.csdn.net/grd_java/article/details/123063846 很多人觉得动态规划很难,但它就是固定套路而已。其实动态规划只不过是将多余的步骤,提前放到dp数组中(就是一个数组,只

    2024年01月21日
    浏览(13)
  • java数据结构与算法刷题-----LeetCode1091. 二进制矩阵中的最短路径

    java数据结构与算法刷题-----LeetCode1091. 二进制矩阵中的最短路径

    java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完): https://blog.csdn.net/grd_java/article/details/123063846 双分裂蛇:是求二维表中从起点到终点的经典思路(也是求无权图的最短路径问题的经典解法)。创建两条分裂蛇,分别从起点和

    2024年04月26日
    浏览(49)
  • 数据结构算法leetcode刷题练习(1)

    数据结构算法leetcode刷题练习(1)

    给定一个三角形 triangle ,找出自顶向下的最小路径和。 每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标

    2023年04月24日
    浏览(9)
  • LeetCode 378 有序矩阵中第K小的元素

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

    LeetoCode地址: . - 力扣(LeetCode) 题解内容大量转载于:. - 力扣(LeetCode) 题意很直观,就是求二维矩阵中所有元素排序后第k小的数。 该写法不再赘述,维护一个大小为k的小顶堆,遍历矩阵所有元素进行入堆操作。 时间复杂度:O(nlogk) 空间复杂度:O(k) 由于矩阵在行和列上都是

    2024年04月12日
    浏览(12)
  • LeetCode 刷题 数据结构 链表 203 移除链表元素

    LeetCode 刷题 数据结构 链表 203 移除链表元素

    Given the  head  of a linked list and an integer  val , remove all the nodes of the linked list that has  Node.val == val , and return  the new head . Example 1: Example 2: Example 3: Constraints: The number of nodes in the list is in the range  [0, 104] . 1 = Node.val = 50 0 = val = 50 今天leetcode的中文官网比较卡,所以是登录官网进行

    2024年02月14日
    浏览(15)
  • LeetCode 刷题 数据结构 数组 485 最大连续1的个数

    LeetCode 刷题 数据结构 数组 485 最大连续1的个数

    给定一个二进制数组  nums  , 计算其中最大连续  1  的个数。 示例 1: 示例 2: 提示: 1 = nums.length = 105 nums[i]  不是  0  就是  1.   参看bilibli视频-up主 爱学习的饲养员,讲解的很清晰。 手把手带你刷Leetcode力扣|各个击破数据结构和算法|大厂面试必备技能【已完结】-

    2024年02月15日
    浏览(38)
  • Leetcode刷题---C语言实现初阶数据结构---单链表

    Leetcode刷题---C语言实现初阶数据结构---单链表

    删除链表中等于给定值 val 的所有节点 给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val==val的节点,并返回新的头节点 输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5] 示例 2: 输入:head = [ ], val = 1 输出:[ ] 示例 3: 输入:head = [7,7,7,7], val = 7 输出:

    2024年02月15日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包