1. 程式人生 > 其它 >矩陣的極小值

矩陣的極小值

ACwing

class Solution {
public:
    vector<int> getMinimumValue(int n) {
        const int INF = ~(1 << 31);       //自然是有符號數的最大值
        int l = 0, r = n - 1;             //二分邊界
        while(l <= r)                     //相等的時候也要尋找列的最小值
        {
            int col = (l + r) >> 1;       //中間列
            int row, val = INF;       
            for(int i = 0; i < n; i++) {
                int t = query(i, col);   
                if(t < val) row = i, val = t;              //找到本列中的最小值
            }
            if(col - 1 >= 0 && query(row, col - 1) < val) {  //左邊的列比本列小,設定左邊界
                r = col - 1; continue;
            }                                               
            if(col + 1 < n && query(row, col + 1) < val) {   //右邊的列比本列小,設定右邊界
                l = col + 1; continue;
            }
            return {row, col};                               //否則便是找到
        }
        return {-1, -1};
    }
};