劍指offer 二維陣列中的查詢

2021-10-18 23:02:40 字數 960 閱讀 8946

題目分析

已知條件:二維陣列每一行從左到右遞增,每一列從上到下遞增。

如果暴力遍歷而陣列,時間複雜度為o(m*n),而我們所直到的二分查詢時間複雜度為o(logn);而二分法的思想是每次縮小目標值所在的範圍,條件是目標陣列有序;本題中目標陣列是乙個二維陣列,雖然每行每列都是有序的,但是整體無序,故不能使用二分查詢;要想降低二維陣列的查詢的時間複雜度,可以借助二分查詢的思想,逐次縮小查詢的範圍,具體思路如下:

總結上述查詢的過程,我們發現如下規律:首先選取陣列中右上角的數字。如果該數字等於要查詢的數字,查詢過程結束;如果該數字大於要查詢的數字,剔除這個數字所在的列;如果該數字小於要查詢的數字,剔除這個數字所在的行。也就是說如果要查詢的數字不在陣列的右上角,則每一次都在陣列的查詢範圍中剔除一行或者一列,這樣每一步都可以縮小查詢的範圍,直到找到要查詢的數字,或者查詢範圍為空。

在前面的示例中,我們選取的是右上角,實際我們也可以選左下角。

**描述

leetcode**:

bool findnumberin2darray(int** matrix, int matrixsize, int* matrixcolsize, int target)

return false;

}

官方**:

bool find(int* matrix, int rows, int columns, int number)

else if (matrix[row * columns + column] > number)

--column;

else

++row;

} }return found;

}

劍指offer 二維陣列中查詢

在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和一 個整數,判斷陣列中是否含有該整數。public class solution 因為陣列每一行都按照從左到右遞增的順序排序,每一列都按照從上到下...

劍指offer 二維陣列中查詢

從今天開始每天一題,除了節假日。在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。class solution return false class solut...

劍指offer 二維陣列中查詢

要求如下 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數 示例如下 7,1,2,8,9 2,4,9,12 4,7,10,13 6,8,11,15 思路有三種,...