在乙個排序矩陣中找從小到大的第 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構建...
氣泡排序(從小到大)
氣泡排序是一種極其簡單的排序演算法,也是我所學的第乙個排序演算法。它重複地走訪過要排序的元素,一次比較相鄰兩個元素,如果他們的順序錯誤就把他們調換過來,直到沒有元素再需要交換,排序完成。這個演算法的名字由來是因為越小 或越大 的元素會經由交換慢慢 浮 到數列的頂端。氣泡排序演算法的運作如下 比較相鄰...
氣泡排序詳解(從小到大)
實現 將數列中的第乙個元素和第二個元素比較數值大小,若第乙個元素比第二個元素大,則交換位置。然後再將第二個元素和第三個元素比較數值大小,第三個元素和第四個元素比較 依次不斷地比較,交換。不斷迴圈比較,直到不再發生交換,這就表明排序已完成,此時得到就是乙個有序數列。簡單來說就是不斷迴圈比較數列中相鄰元...