在行列都排好序的矩陣中找數

2021-10-01 11:07:55 字數 1453 閱讀 9095

題目描述

給定乙個有n*m的整型矩陣matrix和乙個整數k,matrix的每一行和每一列都是排好序的。實現乙個函式,判斷k是否在matrix中。

例如:0 1 2 5

2 3 4 7

4 4 4 8

5 7 7 9

如果k為7,返回true,如果k為6,返回false。

要求時間複雜度為o(n+m),額外空間複雜度為o(1)

思路

我們可以選擇左下角或者是右上角的元素作為開始,這樣每處於乙個位置,只能向乙個方向行走,另乙個方向上的資料被淘汰

具體如下:從右上角開始,如果當前數大於目標數,那麼就像左移動,如果當前數小於目標數那麼就向下移動,相等就返回,越界也返回。

舉例說明設k為3,我們一開始位於右上角5處,由於5>3,所以5下面的所有數都不可能有3,我們向左移動來到2處,因為2<3,所以2左邊的所有數被都不可能有3,我們向下來到4處,因為4>3,所以4下面的數都沒有可能有3,我們向左來到3處,兩者相等,直接返回成功

設k=6,我們一開始位於右上角5處,由於5<6,所以5左面的所有數都不可能有6,我們向下移動來到7處,因為6<7,所以7下邊的所有數被都不可能有6,我們向左來到4處,因為4<6,所以4左面的數都沒有可能有6,我們向下來到4處,由於4<6,所以4左邊沒有可能有6,我們向下來到7,由於7>6,所以7的下面不可能有6,因此向左來到7,由於7>6,所以7的下面不可能有6,因此向左來到5,由於5<6,所以5的左邊沒有可能有6,向下移動,越界,直接返回失敗

示例**

#include

#include

using

namespace std;

bool

findinmatrix

(const vectorint>>

&matrix,

int target)

else

if(matrix[row]

[col]

> target)

else

}return

false;}

intmain

(int argc,

char

** ar**),,

,};int target =6;

bool res =

findinmatrix

(matrix, target)

; cout << res << endl;

system

("pause");

return exit_success;

}

在行列都排好序的矩陣中找數

暴力的話時間複雜度到了o n m 從資料狀況出發考慮還有一種解法 例 1 3 4 5 2 4 6 7 5 8 9 11 8 12 13 16 假如說是找6 我們從左下角開始走 一開始是8 比6大 那麼就不用考慮8的右面了 直接往上走 走到了5 5比6小 那麼5上面的都會比6小 向右走 走到了8 8比...

在行列都排好序的矩陣中找數

題目 給定乙個有n m的整型矩陣matrix和乙個整數k,matrix的每一行和每一 列都是排好序的。實現乙個函式,判斷k 是否在matrix中。例如 0 1 2 5 2 3 4 7 4 4 4 8 5 7 7 9 如果k為7,返回true 如果k為6,返 回false。要求 時間複雜度為o n m...

在行列都排好序的矩陣中找數

題目 給定乙個有n m的整型矩陣matrix和乙個整數k,matrix的每一行和每一 列都是排好序的。實現乙個函式,判斷k是否matrix中。若資料如下 如果k為7,返回true 如果k為6,返回false。要求 時間複雜度為o n m 額外空間複雜度為o 1 思路 從右下方最大值的地方開始找,先橫...