劍指offer JZ1有序二維數(shù)組查找整數(shù)

題目描述

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

分析

? ? ? ?觀察下面的數(shù)組,要先找規(guī)律,首先數(shù)組是按序排列的,同一行右邊比左邊小,同一列下面比上面大。因此比較時從右上角比較能夠減少比較的次數(shù):比較的邏輯是:

? ? ? ?首先從數(shù)組的右上角開始,如果給定的值target大于右上角的值那么證明不在第一行,此時行數(shù)+1,列數(shù)不變。這時要比較的是第二行的最后一個數(shù)值如果這個數(shù)target比9大則換行,如果比9小就減小列數(shù)直到遇到比這個數(shù)target小的值時換行,如果是相等的話返回真,如果超出界限的話直接返回假,以此類推找出這個數(shù),或者返回false說明這個數(shù)不在數(shù)組中。

源碼:
public class Solution {

? ? public boolean Find(int target, int [][] array)

? ? {

? ? ? ? int row=array.length;

? ? ? ? int i=0;

? ? ? ? int col=array[0].length;

? ? ? ? int j=array[i].length-1;

? ? ? ? while(i<row&&j>=0)

? ? ? ? {


? ? ? ? ? ? if(target==array[i][j])

? ? ? ? ? ? {

? ? ? ? ? ? ? ? return true;

? ? ? ? ? ? }

? ? ? ? ? ? if(target>array[i][j])

? ? ? ? ? ? {

? ? ? ? ? ? ? ? i++;


? ? ? ? ? ? }

? ? ? ? ? ? else

? ? ? ? ? ? {

? ? ? ? ? ? ? ? j--;

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? return false;




? ? }

}

?著作權(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

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