給定乙個 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...