国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

有序矩陣中第 K 小的元素

這篇具有很好參考價(jià)值的文章主要介紹了有序矩陣中第 K 小的元素。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

題目鏈接

有序矩陣中第 K 小的元素

題目描述

有序矩陣中第 K 小的元素,算法,矩陣,leetcode,java,算法,數(shù)據(jù)結(jié)構(gòu)文章來源地址http://www.zghlxwxcb.cn/news/detail-808094.html

注意點(diǎn)

  • 每行和每列元素均按升序排序
  • 找到一個(gè)內(nèi)存復(fù)雜度優(yōu)于 O(n2) 的解決方案

解答思路

  • 使用二分查找,思路為:
    (1)因?yàn)樽笊辖堑脑刂蹈?,右下角的元素值更大,先將left設(shè)置為左上角元素的值,right設(shè)置為右下角元素的值;
    (2)判斷不大于left和right中間值mid的元素?cái)?shù)量sum;
    (3)如果sum小于k,則將left設(shè)置為mid + 1,否則將right設(shè)置為mid。
  • 不斷重復(fù)上述過程,直到滿足sum等于k時(shí)right的最小值,此時(shí)left等于right,且right是大于等于矩陣中K個(gè)元素的臨界點(diǎn),所以矩陣中一定會(huì)有一個(gè)元素等于right(否則說明并沒有找到sum等于k時(shí)right的最小值),right也就是有序矩陣中第 K 小的元素

代碼

class Solution {
    int n;
    public int kthSmallest(int[][] matrix, int k) {
        n = matrix.length;
        int left = matrix[0][0];
        int right = matrix[n - 1][n - 1];
        while (left < right) {
            int mid = left + (right - left) / 2;
            int sum = countLessThanMid(matrix, mid);
            if (sum < k) {
                left = mid + 1;
            } else {
                right = mid;
            }
        }
        return left;
    }

    public int countLessThanMid(int[][] matrix, int mid) {
        int sum = 0;
        for (int i = 0; i < n; i++) {
            // 如果左上角都大于mid,則一定沒有小于等于mid的元素存在
            if (matrix[i][0] > mid) {
                return sum;
            }
            // 如果右上角都小于等于mid,則該行所有元素都小于等于mid
            if (matrix[i][n - 1] <= mid) {
                sum += n;
                continue;
            }
            // 其余情況查找改行小于等于mid的元素
            for (int j = 0; j < n; j++) {
                if (matrix[i][j] > mid) {
                    break;
                }
                sum++;
            }
        }
        return sum;
    }
}

關(guān)鍵點(diǎn)

  • 二分查找的思路
  • 怎么找到sum等于k時(shí)right的最小值
  • 當(dāng)right - left=1,且兩個(gè)數(shù)都是負(fù)數(shù)的時(shí)候,求mid時(shí)會(huì)等于right的值,此時(shí)如果sum >= k,則會(huì)一直卡在循環(huán)中無法跳出,需要保證這種特殊情況求mid也是left,所以求mid時(shí)使用left + (right - left) / 2

到了這里,關(guān)于有序矩陣中第 K 小的元素的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【LeetCode-中等題】230. 二叉搜索樹中第K小的元素

    【LeetCode-中等題】230. 二叉搜索樹中第K小的元素

    該題最大的特點(diǎn)就是這個(gè)樹是二叉樹: 所以, 中序遍歷對(duì)二叉樹的遍歷本身就是有序的 思想很簡單,就是通過層序遍歷將節(jié)點(diǎn)都加到List集合中,然后調(diào)用 Collections.sort(list)排序后 ,找第k小的數(shù) list.get(k-1) 二叉樹中序遍歷得到的值序列是遞增有序的 借助一個(gè)list集合來接收有

    2024年02月10日
    瀏覽(50)
  • 力扣HOT100 - 230. 二叉搜索樹中第K小的元素

    力扣HOT100 - 230. 二叉搜索樹中第K小的元素

    解題思路:

    2024年04月25日
    瀏覽(30)
  • 每日一題 230二叉搜索樹中第K小的元素(中序遍歷)

    每日一題 230二叉搜索樹中第K小的元素(中序遍歷)

    給定一個(gè)二叉搜索樹的根節(jié)點(diǎn)? root ?,和一個(gè)整數(shù)? k ?,請(qǐng)你設(shè)計(jì)一個(gè)算法查找其中第? k ? 個(gè)最小元素(從 1 開始計(jì)數(shù))。 示例 1: 示例 2:

    2024年02月10日
    瀏覽(20)
  • java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode566. 重塑矩陣

    java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode566. 重塑矩陣

    java數(shù)據(jù)結(jié)構(gòu)與算法刷題目錄(劍指Offer、LeetCode、ACM)-----主目錄-----持續(xù)更新(進(jìn)不去說明我沒寫完): https://blog.csdn.net/grd_java/article/details/123063846 代碼:時(shí)間復(fù)雜度O(r*c).除題目要求外,算法本身沒有需要額外空間,空間復(fù)雜度O(1) 從0開始算,一個(gè)3列n行矩陣中,每行就有3個(gè)元

    2024年01月21日
    瀏覽(22)
  • java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode240. 搜索二維矩陣 II

    java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode240. 搜索二維矩陣 II

    java數(shù)據(jù)結(jié)構(gòu)與算法刷題目錄(劍指Offer、LeetCode、ACM)-----主目錄-----持續(xù)更新(進(jìn)不去說明我沒寫完): https://blog.csdn.net/grd_java/article/details/123063846 解題思路 法一:把整個(gè)數(shù)組遍歷一遍,時(shí)間復(fù)雜度O(m*n) 法二:每一行用二分搜索,那么時(shí)間復(fù)雜度就是O(m * l o g 2 n log_2{n} l o g

    2024年01月22日
    瀏覽(35)
  • java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode766. 托普利茨矩陣

    java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode766. 托普利茨矩陣

    java數(shù)據(jù)結(jié)構(gòu)與算法刷題目錄(劍指Offer、LeetCode、ACM)-----主目錄-----持續(xù)更新(進(jìn)不去說明我沒寫完): https://blog.csdn.net/grd_java/article/details/123063846 解題思路 這道題只要換一種理解方式,瞬間就會(huì)變的很簡單。 題目描述是每個(gè)元素左上和右下對(duì)角線元素都相同。但是,我們發(fā)

    2024年01月25日
    瀏覽(25)
  • java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode1091. 二進(jìn)制矩陣中的最短路徑

    java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode1091. 二進(jìn)制矩陣中的最短路徑

    java數(shù)據(jù)結(jié)構(gòu)與算法刷題目錄(劍指Offer、LeetCode、ACM)-----主目錄-----持續(xù)更新(進(jìn)不去說明我沒寫完): https://blog.csdn.net/grd_java/article/details/123063846 雙分裂蛇:是求二維表中從起點(diǎn)到終點(diǎn)的經(jīng)典思路(也是求無權(quán)圖的最短路徑問題的經(jīng)典解法)。創(chuàng)建兩條分裂蛇,分別從起點(diǎn)和

    2024年04月26日
    瀏覽(97)
  • leetcode 215.數(shù)組中第k大的元素

    leetcode 215.數(shù)組中第k大的元素

    ?? leetcode鏈接:數(shù)組中第k大的元素 思路: 使用堆數(shù)據(jù)結(jié)構(gòu),大堆的堆頂是堆內(nèi)最大的元素,也就是把當(dāng)前堆 pop k - 1 次,第 k 次 top 出來的元素就是第 k 大的數(shù)。 代碼:

    2024年02月09日
    瀏覽(31)
  • 【LeetCode熱題100】打卡第39天:數(shù)組中第K個(gè)最大元素&最大正方形

    【LeetCode熱題100】打卡第39天:數(shù)組中第K個(gè)最大元素&最大正方形

    大家好,我是知識(shí)汲取者,歡迎來到我的LeetCode熱題100刷題專欄! 精選 100 道力扣(LeetCode)上最熱門的題目,適合初識(shí)算法與數(shù)據(jù)結(jié)構(gòu)的新手和想要在短時(shí)間內(nèi)高效提升的人,熟練掌握這 100 道題,你就已經(jīng)具備了在代碼世界通行的基本能力。在此專欄中,我們將會(huì)涵蓋各種

    2024年02月16日
    瀏覽(20)
  • 【LeetCode 算法】Matrix Diagonal Sum 矩陣對(duì)角線元素的和

    給你一個(gè)正方形矩陣 mat ,請(qǐng)你返回矩陣對(duì)角線元素的和。 請(qǐng)你返回在矩陣主對(duì)角線上的元素和副對(duì)角線上且不在主對(duì)角線上元素的和。 n = = m a t . l e n g t h = = m a t [ i ] . l e n g t h 1 = n = 100 1 = m a t [ i ] [ j ] = 100 n == mat.length == mat[i].length\\\\ 1 = n = 100\\\\ 1 = mat[i][j] = 100 n == ma t . l

    2024年02月13日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包