劍指offer01 陣列篇 二維陣列中的查詢

2021-10-24 14:19:45 字數 2528 閱讀 2540

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

比如給定以下陣列[[

2.1 暴力法

最直接的就是暴力法,兩次for迴圈,遍歷那個二維陣列,如果array[i][j] == target,那麼返回就是true,否則返回的就是false

2.2 暴力二分法

這個也類似於暴力法,相當於把暴力法的第二次for迴圈進行改造,因為是有序的。所以第二次for迴圈的時候採用折半去搜尋

2.3 右上角搜尋

之所以選擇右上角的話,是因為從最左上角(起始位置)到最右上角,再從最右上角到最右下角,是一段逐漸遞增的過程,所以右上角適合作為搜尋的位置,同理,左下角也是一段連續的,也可以作為搜尋的位置。

這裡的話,大致的過程就是: 先拿最右上角的值和目標值(target)進行比較,如果最右上角的值比目標值大,那麼肯定在右上角那一列的,然後 列- -;如果最右上角的值比目標值小的話,那麼肯定在右上角的那一行的下面,就要進行 行++。

2.4 左下角搜尋

同2.3的思路

//暴力法

public

static

boolean

solution3

(int

array,

int target)

for(

int i =

0; i < array.length; i++)}

}return

false

;}

3.2 暴力二分法
//暴力二分法

public

static

boolean

solution2

(int

array,

int target)

for(

int i =

0; i < array.length; i++

)else

if(target < array[i]

[mid]

)else}}

return

false

;}

3.3 右上角
//從右上角查詢

public

static

boolean

solution1

(int

array,

int target)

//總行數

int rows = array.length;

//總列數

int cols = array[0]

.length;

int row =0;

int col = array[0]

.length -1;

while

(row < rows && col >=0)

else

if(array[row]

[col]

> target)

else

}return

false

;}

3.4 左下角
//左下角開始

public

static

boolean

solution4

(int

array,

int target)

int rows = array.length;

int cols = array[0]

.length;

int row = rows -1;

int col =0;

while

(row >=

0&& col < cols)

else

if(array[row]

[col]

< target)

else

}return

false

;}

3.5 測試**
public

static

void

main

(string[

] args),,

,}; system.out.

println

(solution4

(array,11));}

劍指offer 01 二維陣列的查詢

在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。由題意知,陣列是有序的,既然有序就可以不用雙重迴圈找值 考慮中間值,即若大於往 找,若小於則往 找 得出最左下...

劍指Offer01之二維陣列中查詢目標數

在乙個二維陣列中 每個一維陣列的長度相等 每一行都是從左到右遞增的順序排序,每一列都是從上到下遞增的順序排序,輸入這樣乙個二維陣列和乙個整數,判斷該整數是否在二維陣列中。暴力查詢法,通過遍歷整個二維陣列進行判斷 public static boolean violence int arr,int t...

劍指offer 01二維陣列中的查詢

二叉排序樹的定義 二叉排序樹,又稱為二叉查詢樹。它或者是一顆空樹,或者具有下列性質的二叉樹。若它的左子樹不空,則左子樹上所有節點的值均小於它的根節點的值 若它的右子樹不空,則右子樹上所有節點的值均大於它的根節點的值 它的左 右子樹也分別為二叉排序樹。這種樹模式下的搜尋途徑可以遍歷或預判所有可能性 比...