杨氏矩阵

简介: 杨氏矩阵

1.题目要求

有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在,要求算法复杂度是O(n)。(注:不一定是n*n的矩阵)

举例:

1 2 3 4

2 3 4 5

6 7 8 9

5  6  7

10 11 12

12 13 15

2.思路

思路1:也是最容易想到的,依次遍历这个二维数组,虽然不满足题目O(N)的复杂度需求,但是可以满足基本需求.

改进:我们知道,整个矩阵最大的数在右下角,最小的数在左下角,根据题目需求,假设我要找的数比第一列最右边的数大,那就跳到下一行寻找,假设小,就向左寻找.

举例:

1   6   10   15

7  10   12   16

11  20  21   33

13  21  22   34

假设我要寻找12

假设我要寻找13

3.参考代码

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
//杨氏矩阵
#define COL 4
int YangSearch(int arr[][COL], int row, int col, int key)
{
  int i = 0;
  int j = col - 1;
  if (key <arr[0][0] || key>arr[row - 1][col - 1])
    return 0;
  while (i < row && j >= 0)
  {
    if (arr[i][j] > key)
    {
      j--;
    }
    else if (arr[i][j] < key)
    {
      i++;
    }
    if (arr[i][j] == key)
    {
      return 1;
            //找到了
    }
  }
  return 0;
    //找不到
}
int main()
{
  int arr[][4] = { {1,6,10,15},{7,10,12,16},{11,20,21,33},{13,21,22,34} };
  int a = YangSearch(arr, 4, 4, 20);
  return 0;
}
相关文章
|
12月前
|
机器学习/深度学习
【N皇后】
【N皇后】
消失的数字,旋转数组(leetcode 一题多解)
消失的数字,旋转数组(leetcode 一题多解)
|
C++
剑指offer 53. 数组中的逆序对
剑指offer 53. 数组中的逆序对
72 0
剑指offer 53. 数组中的逆序对
|
算法
算法篇-杨氏矩阵
算法篇-杨氏矩阵
82 0
【leedcode】0005. 最长回文子串
【leedcode】0005. 最长回文子串
40 0
从杨氏矩阵找数
杨氏矩阵,是对组合表示理论和舒伯特演算很有用的工具。它提供了一种方便的方式来描述对称和一般线性群的群表示,并研究它们的性质。有一个二维数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N)。
容斥原理 (两个例题)
容斥原理 (两个例题)
132 0
来认识并了解一下:不一样的杨氏矩阵
来认识并了解一下:不一样的杨氏矩阵
98 0
来认识并了解一下:不一样的杨氏矩阵
|
算法 Python
Leedcode 两数、三数、四数之和总结
Leedcode 两数、三数、四数之和总结
130 0
Leedcode 两数、三数、四数之和总结
【力扣】最大子数组和 区别于盛水最多的水桶
【力扣】最大子数组和 区别于盛水最多的水桶
【力扣】最大子数组和 区别于盛水最多的水桶