1. 程式人生 > 其它 >SpringBoot WebService 及 注意項

SpringBoot WebService 及 注意項

原題連結

240. Search a 2D Matrix II

題目描述

編寫一個高效的演算法來搜尋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) 為止,我們執行以下操作:如果當前指向的值大於目標值,則可以 “向上” 移動一行。 否則,如果當前指向的值小於目標值,則可以移動一列。不難理解為什麼這樣做永遠不會刪減正確的答案;因為行是從左到右排序的,所以我們知道當前值右側的每個值都較大。 因此,如果當前值已經大於目標值,我們知道它右邊的每個值會比較大。也可以對列進行非常類似的論證,因此這種搜尋方式將始終在矩陣中找到目標(如果存在)。

程式碼

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;
    }
};
只有0和1的世界是簡單的