面試演算法題 尋找矩陣的極小值

2022-09-20 20:42:12 字數 1185 閱讀 4435

給定乙個 n×n 的矩陣,矩陣中包含 n×n 個 互不相同 的整數。

定義極小值:如果乙個數的值比與它相鄰的所有數字的值都小,則這個數值就被稱為極小值。

乙個數的相鄰數字是指其上下左右四個方向相鄰的四個數字,另外注意,處於邊界或角落的數的相鄰數字可能少於四個。

要求在 o(nlogn) 的時間複雜度之內找出任意乙個極小值的位置,並輸出它在第幾行第幾列。

本題中矩陣是隱藏的,你可以通過我們預設的 int 函式 query 來獲得矩陣中某個位置的數值是多少。

例如,query(a,b) 即可獲得矩陣中第 a 行第 b 列的位置的數值。

注意:矩陣的行和列均從 0 開始編號。

query()函式的呼叫次數不能超過 (n+2)×⌈log2n⌉+n。

答案不唯一,輸出任意乙個極小值的位置即可。

資料範圍

1≤n≤300,矩陣中的整數在int範圍內。

輸入樣例:

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

輸出樣例:

[0, 0]

**

// forward declaration of queryapi.

// int query(int x, int y);

// return int means matrix[x][y].

//不能行列二分,行列二分的答案不一定正確

// 主要思想是用二分的方法進行列查詢,對每列找到最小值,判單這個最小值左右兩個數是否能讓該數滿足矩陣極小值,如果不能排除掉一半的列

class solution

}ll left = mid ? query(k, mid -1) :inf;// 特判下mid是不是邊界

ll right = mid + 1 < n ? query(k, mid + 1):inf;

// 進行mid判斷,可以篩掉一半的列

if(val < left && val < right) return ;

if(left < val) r = mid - 1;

else l = mid + 1;

}//得到最後r==l ,找該列中最小值即符合條件

int k;

ll val = inf;

for (int i = 0; i < n; i ++)

}return ;

}};

面試題 尋找矩陣中的極小值

給定乙個n n的矩陣,矩陣中包含n n個 互不相同 的整數。定義極小值 如果乙個數的值比與它相鄰的所有數字的值都小,則這個數值就被稱為極小值。乙個數的相鄰數字是指其上下左右四個方向相鄰的四個數字,另外注意,處於邊界或角落的數的相鄰數字可能少於四個。要求在o nlogn 的時間複雜度之內找出任意乙個極...

對人工智慧中「極大極小值」的博弈演算法的資料整理。

對人工智慧中 極大極小值 的博弈演算法的資料整理。1.極大極小演算法被廣泛應用於計算機的棋類遊戲中。不被用於打牌。因為計算機無法看到對手的牌,就很難做出 在棋類遊戲中,雙方的棋子都是明確的,所以計算機可以通過類似深度優先搜尋 遞迴 的方法來求解。也就是the minimax tree。為了優化演算法...

一些簡單的面試演算法題?

header content type text html charset utf 8 for a 0 a 100 a 二位陣列排序 arr array array id 1,name lisi age 20 array id 2,name lisi age 50 array id 3,name l...