有一个二维数组.数组的每行从左到右是递增的,每列从上到下是递增的.在这样的数组中查找一个数字是否存在。时间复杂度小于O(N)

xiaoxiao2021-02-28  38

想法:首先我们如果利用循环逐个去找,时间复杂度就会等于0(n);接下来我们看到题目说是这个数组是从左到右递增,从上到下递增,利用行和列我们就会将问题变得简单。

举个例子:

          

上述假若要找的数字大于右上角的数字那么我们就删除右上角数字所在的那一行。

假若找不到打印not find,找到了就打印行列号

程序如下:

结果:

int yang_find(int yang[][3], int size, int n) { assert(yang); assert(size>0); int i = 0; int j = 2; while (i<size && j>=0) { if (yang[i][j] > n){ j--; } else if (yang[i][j] < n){ i++; } else { return 'y'; //找到了 } } return 'n'; //没找到 } int main() { int n=2; int yang[][3] = { { 1, 3, 4 }, { 2, 4, 5 }, { 4, 5, 6 }, }; int size = sizeof(yang) / sizeof(yang[0]); int ret=yang_find(yang, size, n); printf("%c\n", ret);

转载请注明原文地址: https://www.6miu.com/read-2621566.html

最新回复(0)