面試題3 有序矩陣中查詢數字

2022-09-07 17:00:23 字數 882 閱讀 6008

題目描述:在乙個二維陣列中,每行數字從左到右遞增,每列數字從上到下遞增,給定乙個整數,判斷該數是否存在於二位陣列之中.

解決方法:

我們可以從右上角開始:

如果該數恰好等於要查詢的數,則返回true.

如果該數小於要查詢的數,說明這一行的數都小於要查詢的數,於是刪除第一行繼續查詢.

如果該數大於要查詢的數,說明這一列都大於要查詢的數,於是刪除這一列繼續查詢.

最後如果都沒有找到,則返回false.

需要注意的是,在c語言中,二維陣列作為引數傳遞的時候需要註明第二維的大小例如find(int a[4]),但是這樣就會把陣列第二維大小定死,

所以使用了一位陣列代替二維陣列而把定址方式由a[x][y]變為a[x*column+y]的方式,並需要把二位陣列的位址進行強制轉換,**如下:

1 #include 2 #include 3

4using

namespace

std;56

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

number)720

else

if( matrix[row * columns + column] 2124

else

2528}29

}30return

found;31}

3233

int main(int argc, char *ar**)

34,

38 ,

39 ,

40

41};

42 cout43 }

面試題整理 矩陣查詢元素

需要在矩陣中查詢元素。這個矩陣的排列如下 每一行都是有序的。每一列都是有序的。比如乙個小矩陣。10 30 20 80 現在,我們需要在乙個這樣n m的矩陣中找到乙個元素,並返回其位置。思路 首先,這個題不太適合二分查詢。因為並不能保證第二行的元素都一定比第一行的任意元素大。所以應該是很難找到o lg...

面試題3 陣列中重複的數字

在乙個長度為n的陣列裡的所有數字都在0 n 1範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。1.方法一 把輸入的資料進行排序,排序後再判斷有無重複的數字,時間複雜...

面試題3 陣列中重複的數字

在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。雜湊表int findduplicatenum vector int...