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

java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode378. 有序矩陣中第 K 小的元素

這篇具有很好參考價(jià)值的文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode378. 有序矩陣中第 K 小的元素。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

java數(shù)據(jù)結(jié)構(gòu)與算法刷題目錄(劍指Offer、LeetCode、ACM)-----主目錄-----持續(xù)更新(進(jìn)不去說明我沒寫完):https://blog.csdn.net/grd_java/article/details/123063846

java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode378. 有序矩陣中第 K 小的元素,算法,java,矩陣,算法,leetcode

解題思路
  1. 已知矩陣相對有序,可以用二分搜索,不過和一維數(shù)組排序不同,這是二維的
  2. 每一行都遞增,每一列也是遞增,所以每一行的最后一個(gè)元素都是當(dāng)前行最大的。每一列的最下面元素也都是當(dāng)前列最大的
  3. 所以,隨便劃分一個(gè)矩形區(qū)域,左上角都是最小的元素,右下角都是最大的元素。
  4. 此時(shí)就有了兩個(gè)邊界,讓我們來找到這個(gè)區(qū)域的最大值和最小值的中間值(不一定是矩陣中的元素)。然后判斷,矩陣中元素誰比這個(gè)中間值小。只需要判斷每行的后面的元素即可,因?yàn)槊啃羞f增排序,最后面的一定是最大的,如果最后一個(gè)比mid中間值小,那么這一行都比它小,如果倒數(shù)第2個(gè)元素比mid小,那么這一行前面的元素,一直從前往后到倒數(shù)第二個(gè)都比mid小。
    java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode378. 有序矩陣中第 K 小的元素,算法,java,矩陣,算法,leetcode
    java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode378. 有序矩陣中第 K 小的元素,算法,java,矩陣,算法,leetcode
    java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode378. 有序矩陣中第 K 小的元素,算法,java,矩陣,算法,leetcode
    java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode378. 有序矩陣中第 K 小的元素,算法,java,矩陣,算法,leetcode
代碼:時(shí)間復(fù)雜度O( n ? l o g 2 r ? l n*log_2{r-l} n?log2?r?l),二分查找進(jìn)行次數(shù)為 O( l o g 2 r ? l log_2{r-l} log2?r?l),每次操作時(shí)間復(fù)雜度為 O(n). 空間復(fù)雜度O(1)

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

class Solution {
    public int kthSmallest(int[][] matrix, int k) {
        int rows = matrix.length;//行數(shù)
        int cols = matrix[0].length;//列數(shù)
        int l = matrix[0][0];//左上角元素
        int r = matrix[rows-1][cols-1];//右下角元素
        while(l < r){//如果滿足"小的" 不大于 "大的",就可以繼續(xù)循環(huán)
            int mid = l + (r-l)/2;//找到他倆的中位數(shù)
            int count = checkValue(matrix, mid);//獲取這個(gè)數(shù)在數(shù)組所有元素排好序后,它的相對位置
            if(count < k){//如果這個(gè)數(shù)比目標(biāo)值k小,說明我們應(yīng)該在mid元素的右下區(qū)域找
                l = mid+1;
            } else {//否則在mid元素的左上區(qū)域找
                r = mid;
            }
        }
        return l;//最終,二分區(qū)域只剩一個(gè)元素或沒有元素
    }

    public int checkValue(int[][] matrix, int mid){
        int r = 0;//行下標(biāo)
        int c = matrix[0].length-1;//列下標(biāo)
        int count = 0;//計(jì)數(shù)
        while(r< matrix.length && c >= 0){//如果行下標(biāo)和列下標(biāo)不越界就繼續(xù)
            if(matrix[r][c] <= mid){//如果當(dāng)前元素比mid小
                r++;//行需要進(jìn)行下移,繼續(xù)判斷
                count += (c+1);//既然下移了一行,那么就統(tǒng)計(jì)一行的元素,一行有c+1列,就有c+1個(gè)元素需要統(tǒng)計(jì)
                //因?yàn)閿?shù)組下標(biāo)從0開始,c是當(dāng)前二分區(qū)域的最后一列的下標(biāo),所以有c+1列
            } else {//如果當(dāng)前元素比mid還大,就說明沒有我們要找的元素,讓列前移一列
                c--;
            }
        }
        return count;//最終返回有幾個(gè)元素比mid小。
    }
}

到了這里,關(guān)于java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode378. 有序矩陣中第 K 小的元素的文章就介紹完了。如果您還想了解更多內(nèi)容,請?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)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

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

相關(guān)文章

  • 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è)元素左上和右下對角線元素都相同。但是,我們發(fā)

    2024年01月25日
    瀏覽(25)
  • java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode667. 優(yōu)美的排列 II

    java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode667. 優(yōu)美的排列 II

    java數(shù)據(jù)結(jié)構(gòu)與算法刷題目錄(劍指Offer、LeetCode、ACM)-----主目錄-----持續(xù)更新(進(jìn)不去說明我沒寫完): https://blog.csdn.net/grd_java/article/details/123063846 解題思路 題目要求我們返回一個(gè)數(shù)組長度為n的數(shù)組,必須含有1~n的所有數(shù),并且從左到右,相鄰的元素依次相減,它們的差,必

    2024年01月25日
    瀏覽(25)
  • java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode209. 長度最小的子數(shù)組

    java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode209. 長度最小的子數(shù)組

    java數(shù)據(jù)結(jié)構(gòu)與算法刷題目錄(劍指Offer、LeetCode、ACM)-----主目錄-----持續(xù)更新(進(jìn)不去說明我沒寫完): https://blog.csdn.net/grd_java/article/details/123063846 解題思路 代碼:時(shí)間復(fù)雜度O(n).空間復(fù)雜度O(1)

    2024年01月21日
    瀏覽(96)
  • java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode96. 不同的二叉搜索樹

    java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode96. 不同的二叉搜索樹

    java數(shù)據(jù)結(jié)構(gòu)與算法刷題目錄(劍指Offer、LeetCode、ACM)-----主目錄-----持續(xù)更新(進(jìn)不去說明我沒寫完): https://blog.csdn.net/grd_java/article/details/123063846 很多人覺得動(dòng)態(tài)規(guī)劃很難,但它就是固定套路而已。其實(shí)動(dòng)態(tài)規(guī)劃只不過是將多余的步驟,提前放到dp數(shù)組中(就是一個(gè)數(shù)組,只

    2024年01月21日
    瀏覽(30)
  • 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)
  • 數(shù)據(jù)結(jié)構(gòu)算法leetcode刷題練習(xí)(1)

    數(shù)據(jù)結(jié)構(gòu)算法leetcode刷題練習(xí)(1)

    給定一個(gè)三角形 triangle ,找出自頂向下的最小路徑和。 每一步只能移動(dòng)到下一行中相鄰的結(jié)點(diǎn)上。相鄰的結(jié)點(diǎn) 在這里指的是 下標(biāo) 與 上一層結(jié)點(diǎn)下標(biāo) 相同或者等于 上一層結(jié)點(diǎn)下標(biāo) + 1 的兩個(gè)結(jié)點(diǎn)。也就是說,如果正位于當(dāng)前行的下標(biāo) i ,那么下一步可以移動(dòng)到下一行的下標(biāo)

    2023年04月24日
    瀏覽(21)
  • LeetCode 378 有序矩陣中第K小的元素

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

    LeetoCode地址:?. - 力扣(LeetCode) 題解內(nèi)容大量轉(zhuǎn)載于:. - 力扣(LeetCode) 題意很直觀,就是求二維矩陣中所有元素排序后第k小的數(shù)。 該寫法不再贅述,維護(hù)一個(gè)大小為k的小頂堆,遍歷矩陣所有元素進(jìn)行入堆操作。 時(shí)間復(fù)雜度:O(nlogk) 空間復(fù)雜度:O(k) 由于矩陣在行和列上都是

    2024年04月12日
    瀏覽(25)
  • LeetCode 刷題 數(shù)據(jù)結(jié)構(gòu) 數(shù)組 485 最大連續(xù)1的個(gè)數(shù)

    LeetCode 刷題 數(shù)據(jù)結(jié)構(gòu) 數(shù)組 485 最大連續(xù)1的個(gè)數(shù)

    給定一個(gè)二進(jìn)制數(shù)組? nums ?, 計(jì)算其中最大連續(xù)? 1 ?的個(gè)數(shù)。 示例 1: 示例 2: 提示: 1 = nums.length = 105 nums[i] ?不是? 0 ?就是? 1. ? 參看bilibli視頻-up主 愛學(xué)習(xí)的飼養(yǎng)員,講解的很清晰。 手把手帶你刷Leetcode力扣|各個(gè)擊破數(shù)據(jù)結(jié)構(gòu)和算法|大廠面試必備技能【已完結(jié)】-

    2024年02月15日
    瀏覽(79)
  • LeetCode 刷題 數(shù)據(jù)結(jié)構(gòu) 鏈表 203 移除鏈表元素

    LeetCode 刷題 數(shù)據(jù)結(jié)構(gòu) 鏈表 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的中文官網(wǎng)比較卡,所以是登錄官網(wǎng)進(jìn)行

    2024年02月14日
    瀏覽(31)
  • Leetcode刷題---C語言實(shí)現(xiàn)初階數(shù)據(jù)結(jié)構(gòu)---單鏈表

    Leetcode刷題---C語言實(shí)現(xiàn)初階數(shù)據(jù)結(jié)構(gòu)---單鏈表

    刪除鏈表中等于給定值 val 的所有節(jié)點(diǎn) 給你一個(gè)鏈表的頭節(jié)點(diǎn)head和一個(gè)整數(shù)val,請你刪除鏈表中所有滿足Node.val==val的節(jié)點(diǎn),并返回新的頭節(jié)點(diǎn) 輸入: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日
    瀏覽(94)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包