SpringBoot WebService 及 注意項
阿新 • • 發佈:2021-07-10
原題連結
題目描述
編寫一個高效的演算法來搜尋mxn矩陣 matrix 中的一個目標值 target 。該矩陣具有以下特性:
每行的元素從左到右升序排列。
每列的元素從上到下升序排列。
示例 1:
輸入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
輸出:true
問題分析
首先,我們初始化一個指向矩陣左下角的 (row,col) 指標。然後,直到找到目標並返回 true(或者指標指向矩陣維度之外的 (row,col) 為止,我們執行以下操作:如果當前指向的值大於目標值,則可以 “向上” 移動一行。 否則,如果當前指向的值小於目標值,則可以移動一列。不難理解為什麼這樣做永遠不會刪減正確的答案;因為行是從左到右排序的,所以我們知道當前值右側的每個值都較大。 因此,如果當前值已經大於目標值,我們知道它右邊的每個值會比較大。也可以對列進行非常類似的論證,因此這種搜尋方式將始終在矩陣中找到目標(如果存在)。
程式碼
只有0和1的世界是簡單的class Solution { public: bool searchMatrix(vector<vector<int>>& matrix, int target) { int m = matrix.size(), n = matrix[0].size(); int i = m-1, j = 0; while(i >= 0 && j < n){ if(matrix[i][j] == target) return true; else if(matrix[i][j] < target) j++; else i--; } // 一種等價寫法 // int i = 0, j = n-1; // while(i < m && j >= 0){ // if(matrix[i][j] == target) return true; // else if(matrix[i][j] < target) i++; // else j--; // } return false; } };