排序矩陣中的從小到大第k個數

2021-08-15 03:26:13 字數 896 閱讀 5900

在乙個排序矩陣中找從小到大的第 k 個整數。

排序矩陣的定義為:每一行遞增,每一列也遞增。

您在真實的面試中是否遇到過這個題?

yes

樣例給出 k =4和乙個排序矩陣:

[

[1 ,5 ,7],

[3 ,7 ,8],

[4 ,8 ,9],

]

返回5。 挑戰

使用o(k log n)的方法,n為矩陣的寬度和高度中的最大值。

點題:typedef的使用, typedef pair> node;

函式呼叫與算符的過載,struct預設是public的

pair和make_pair的應用

priority_queue的定製化,比如容器和比較函式

top(), pop()

typedef pair> node;

struct cmp

};class solution

int n = matrix[0].size();

if (n == 0)

if (k > m * n)

int res = 0;

priority_queue, cmp> qu;

vector> visit(m, vector(n, 0));

visit[0][0] = 1;

qu.push(make_pair(matrix[0][0], make_pair(0, 0)));

while (k > 0)

if (j < n - 1 && visit[i][j + 1] == 0)

}return res;

}};

排序矩陣中的從小到大第k個數 LintCode

在乙個排序矩陣中找從小到大的第 k 個整數。排序矩陣的定義為 每一行遞增,每一列也遞增。樣例 給出 k 4 和乙個排序矩陣 1 5 7 3 7 8 4 8 9 返回 5。挑戰 使用o k log n 的方法,n為矩陣的寬度和高度中的最大值。思路 與接雨水ii類似,利用priority queue構建...

氣泡排序(從小到大)

氣泡排序是一種極其簡單的排序演算法,也是我所學的第乙個排序演算法。它重複地走訪過要排序的元素,一次比較相鄰兩個元素,如果他們的順序錯誤就把他們調換過來,直到沒有元素再需要交換,排序完成。這個演算法的名字由來是因為越小 或越大 的元素會經由交換慢慢 浮 到數列的頂端。氣泡排序演算法的運作如下 比較相鄰...

氣泡排序詳解(從小到大)

實現 將數列中的第乙個元素和第二個元素比較數值大小,若第乙個元素比第二個元素大,則交換位置。然後再將第二個元素和第三個元素比較數值大小,第三個元素和第四個元素比較 依次不斷地比較,交換。不斷迴圈比較,直到不再發生交換,這就表明排序已完成,此時得到就是乙個有序數列。簡單來說就是不斷迴圈比較數列中相鄰元...