杨氏矩阵问题
楊氏矩陣問題
問題描述:
-
楊氏矩陣定義:同行元素從左向右依次遞增,同列元素從上到下依次遞增,注意:楊氏矩陣行列數可以不相等
-
楊氏矩陣舉例:
123 4 5 6 7 8 9 -
在楊氏矩陣中查找一個元素key,要求時間復雜度小于O(n)
解題思路:
-
我們關注的焦點在于楊氏矩陣右上角的元素(或左下角的元素)
-
以楊氏矩陣右上角的元素為例,去上圖所示的矩陣
-
如果key大于右上角的元素則可以消掉一行,如果key小于右上角的元素則可以消掉一列
-
假設key=7,查找流程如下:
-
key>3,消掉第一行
-
--------------- 4 5 6 7 8 9 -
key>6,消掉第二行
-
--------------- ----- ----- ----- 7 8 9 -
key<9,消掉第三列
--------------- ----- ----- ----- 7 8 ---- -
key<8,消掉第二列
-
--------------- ----- ----- ----- 7 ---- ---- -
找到了key,坐標為第三行,第一列
-
代碼實現
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> #include<string.h> #include<assert.h> int findNum(int arr[3][3],int key, int* row, int* col) {int m = 0;int n = *col - 1;while (m<*row&&n>=0){if (key < arr[m][n]){n--;}else if (key > arr[m][n]){m++;}else{*row = m;*col = n;return 1;}}return 0; }int main() {int arr[3][3] = { {1,2,3},{4,5,6},{7,8,9} };int key = 7;int row = 3;int col = 3;//返回形參數int ret=findNum(arr, key, &row, &col);if (ret == 1){printf("找到了%d,該元素的位置為%d行, %d列",key, row+1, col+1);}else{printf("對不起您查找的元素不存在");} } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
- 上一篇: 牛客 赛码网 编程题JavaScrip
- 下一篇: 如何使用div优雅的布局