)
題目分析
已知條件:二維陣列每一行從左到右遞增,每一列從上到下遞增。
如果暴力遍歷而陣列,時間複雜度為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 思路有三種,...