演算法練習1

2021-10-05 07:39:37 字數 1105 閱讀 7349

給定乙個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...