【leetcode C語言實現(xiàn)】劍指 Offer 04. 二維數(shù)組中的查找

題目描述

在一個 n * m 的二維數(shù)組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數(shù),輸入這樣的一個二維數(shù)組和一個整數(shù),判斷數(shù)組中是否含有該整數(shù)。

示例:

現(xiàn)有矩陣 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。

給定 target = 20,返回 false。

限制:

0 <= n <= 1000

0 <= m <= 1000

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof

解題思路

由于每行中的數(shù)據(jù)從左到右遞增,每一列從上往下遞減,因此右上角的元素是其所在行的最大元素和所在列的最小元素,同理,左下角的元素是其所在列的最大元素和所在行的最小元素。直接將目標值與右上角元素或者左下角元素進行比較可以大大提高查找效率。

代碼

bool findNumberIn2DArray(int **matrix, int matrixSize, int *matrixColSize, int target)
{
    int row = 0;
    int col = *matrixColSize - 1;

    if(matrix == NULL || matrixSize == 0 || matrixColSize == 0)
    {
        return false;
    }

    while((row < matrixSize) && (col >= 0))
    {
        if(matrix[row][col] > target)
        {
            col--;
        }    
        else if(matrix[row][col] < target)
        {
            row++;
        }
        else
        {
            return true;
        }
    }

    return false;
}

執(zhí)行結(jié)果

時間復(fù)雜度:O(M+N),空間復(fù)雜度:O(1)。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容