給定乙個n \times mn×m的整形矩陣matrix和乙個整數k, matrix的每一行和每一列都是排好序的。
實現乙個函式,判斷k是否在matrix中
[要求]
時間複雜度為o(n+m)o(n+m),額外空間複雜度為o(1)o(1)。
輸入描述:
第一行有三個整數n, m, k ,接下來n行,每行m個整數為輸入的矩陣
輸出描述:
若k存在於矩陣中輸出"yes",否則輸出"no"
示例1輸入
1 2 3 4
2 4 5 6
輸出備註:
1 \leqslant n, m \leqslant 10001⩽n,m⩽1000
0 \leqslant k, \text \leqslant 10^90⩽k,矩陣中的數⩽10
9此題是在有序的二維陣列中找數,因為是有序的,所以沒有必要從左到右,從上到下乙個乙個的找。可以先從右上或者左下開始。以左下舉例子,當左下的數字大於要找的數字,說明在該行中所有的數字都大於它,所以需要在上一行中尋找。如果左下的數字小於要找的數字,說明該數字可能在這一行中,所以將列數加一。如果數字正好等於要找的數字。則直接跳出。然後以此類推。
c的解題步驟 ,空間複雜度為o(1
),時間複雜度為o(n2)
#include
intmain()
}for
(i=n-
1,j=
0;i>=
0&&j)else
if(a[i]
[j]else
}printf
("no");
return0;
}在這裡插入**片
c++的解題思路
#include
#include
using namespace std;
intmain()
}for
(i=n-
1,j=
0;i>=
0&&j)else
if(a[i]
[j]else
}
cout<<
"no"
}
演算法練習1
自己不怎麼關注演算法,但是面試的時候常有一些公司就會給演算法題目,目的也很直接,自己每日一練就好。思路 使用純 c來實現。條件1,陣列b內所有數字加起來為10 動態調整陣列b內的數值。因為時間先後的原因,會導致先前統計個數出現的次數不正確。include include static int a 1...
演算法練習1
問題描述 兩字串變數 s m,分別經過若干次step1和step2後得 得到乙個新s 若輸入指定長度,請返回s要達到目標長度至少需要幾步 輸入 目標長度 int len 輸出 步數 int stepnum s a m step1 m s s s s step2 s s m 分析 1.通過分析得到 這...
演算法設計題練習1
例1 n 1各不同的整數 a1,a2,a3,an,m 假設有乙個亂序的整數序列,其中 a1,a2,a3,a4,an均出現兩次,m出現一次 需要找出出現一次的m。功能實現 num 1,1,2,2,3,3,4,5,4,5,6,7,7,6,8,9,9,8,10 num1 for i in range le...