• 在行列都排好序的矩阵中找数


    Problem:
      【题目】 给定一个有N*M的整型矩阵matrix和一个整数K,
        matrix的每一行和每一 列都是排好序的。实现一个函数,
        判断K是否在matrix中。
        例如:
          0 1 2 5
          2 3 4 7
          4 4 4 8
          5 7 7 9
        如果K为7,返回true;如果K为6,返回false。
      【要求】 时间复杂度为O(N + M),额外空间复杂度为O(1)

    Solution:
       请记住这道题肯定不能用遍历来做,因为遍历做的话,这道题就没有任何意义了。
      请记住这道题的特点,这道题的特点是每一行都排好序了,而且每一列也是有序的。
      然后从矩阵的右上角【或其他角】开始,然后假设矩阵的右上角为6,要找的数为4
      也就说该数字6比要找到数4大的话,那么,就向右移动,因为6下面的数不可能比6还要小,比6小的数字只能在6的左边。
      然后比要找的数小,如找到3后,然后就向下走,因为,比要找的数4小的,左边不可能。

      请记住规律就是比要找的数字大的话就向左移动,比要找的数小的话就向下移动。

    Code:  

      

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 template<class T>
     6 void FindNum(const T arr, const int x, const int y, const int num)
     7 {
     8     int Tx=0, Ty=y-1;//选用右上角
     9     while (Tx >= 0 && Tx <= x - 1 && Ty >= 0 && Ty <= y - 1)
    10     {
    11         if (arr[Tx][Ty] == num)
    12         {
    13             cout << "the num is found, and it's position is: " << Tx << " " << Ty << endl;
    14             return;
    15         }
    16         else if (arr[Tx][Ty] > num)//大就向左移动
    17             Ty -= 1;
    18         else  //小就向下移动
    19             Tx += 1;
    20 
    21     }
    22     cout << "the num is not exist!" << endl;
    23     return;    
    24 }
    25 
    26 void Test()
    27 {
    28     int a[3][4] = { 1,3,5,6,2,5,7,9,4,6,8,10 };
    29     FindNum(a, 3, 4, 11);
    30 }
    31 
    32 
    33         
  • 相关阅读:
    SQL Server 动态生成分区脚本
    SQL Server数据库服务器高性能设置
    SQL Server 2005 自动化删除表分区设计方案
    SQL Server 自动化管理分区设计方案(图解)
    简单实用SQL脚本Part:sql多行转为一列的合并问题
    简单实用SQL脚本Part9:纵向回填信息
    SQL Server datetime数据类型设计、优化误区
    SQL Server 创建链接服务器
    SQL Server 数据库最小宕机迁移方案
    SQL Server 表分区注意事项
  • 原文地址:https://www.cnblogs.com/zzw1024/p/10989283.html
Copyright © 2020-2023  润新知