劍指Offer題目1 有序二維陣列搜尋

2021-10-02 05:38:30 字數 1435 閱讀 2716

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

對陣列中的每個元素依次遍歷進行比較。

時間複雜度:o(n*n);

沒有使用到:陣列有序這個條件

/**

** @param target 待查詢的目標

* @param array 二維陣列

* @return

* 思路:遍歷整個二維陣列,窮舉所有的目標進行比較

* 210ms 16784k

*/public

boolean

find1

(int target,

int[

] array)}}

return

false

;}

因為每一行的資料為有序的,就是乙個一維的有序陣列,則可以對這行進行二分查詢,時間複雜度為o(log2n)

則對n行依次使用二分查詢,則時間複雜度為:o(nlogn)

矩陣是有序的,

從左下角來看,向上數字遞減,向右數字遞增,

因此從左下角開始查詢,當要查詢數字比左下角數字大時。右移;

​ 當 要查詢數字比左下角數字小時,上移

從左下角下右上角依次比較

//212ms 

public

static

boolean

find3

(int target,

int[

] array)

else

if(array[i]

[j]< target)

else

}return

false

;}

暴力演算法: o(n*n) 210ms

行內二分查詢: o(nlogn)193ms

右下-左上: 212ms

1 劍指offer 二維陣列查詢

在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。兩種思路 一種是 把每一行看成有序遞增的陣列,利用二分查詢,通過遍歷每一行得到答案,時間複雜度是nlogn p...

劍指offer 二維陣列查詢 1

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

劍指offer 二維陣列

題目 在乙個二維陣列中每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。完成乙個函式,輸入這樣的陣列和乙個整數,判斷陣列中是否含有該整數。思路 由於該二維陣列從左到右,從上到下均為順序遞增的。因此右下角與左上角的數字均大於或小於其周圍數字,如果選擇改組作為起始點,則無法確定下一...