关于有序二维矩阵查找和字符串替换的两道算法题

最近看一本书上写到的两个面试题 于是实现了一下 感觉思路很好,大牛略过 :

1、对于一个二维矩阵,从左到右  从上到下 都是递增的,如何判断一个值是否在矩阵内部?(C实现  实现复杂度 O(n))

bool FindInTwoDimensionalMatrix(int*pMatrix,int iRows,int iCols,int iFindVal)
{
   bool bFind=false ;
   if(pMatrix==0||iRows<=0||iCols<=0)
      return bFind ;
   int iRow=0,iCol=iCols-1;
   while(iRow<iRows&&iCol>=0)
   {
       if(pMatrix[iRow*iCols+iCol]==iFindVal)
       {
         bFind=true ;
         break;
       }else if(pMatrix[iRow*iCols+iCol]>iFindVal)
          --iCol;
        else
          ++iRow;
   }
   return bFind ;
}

2、在一个内存足够大的空间中,存储的 一串字符序列,替换其中的空格为  %20?(C实现,时间复杂度 O(n))

void  ReplaceCharInEnoughMemory(char*pStr)
{
      if(pStr==0)
        return ;
      //计算空格个数
      int nSpace=0 ;
      int nLen=strlen(pStr);
      char *pBehand,*pFront;
      char *pTem=pStr;
      //计算空格个数
      for(;;)
      {
        //0 结尾  ‘\0‘
        if(*pTem==‘\0‘)
           break;
        else if(*pTem==0x20)
        {
          ++nSpace;
        }
        pTem++;
      }
      //后面等于 ‘\0‘需要添上
      pBehand=pStr+nLen-1+nSpace*2;
      pFront=pStr+nLen-1;
      for(;;)
      {
         if(*pFront!=0x20){
          *pBehand=*pFront ;
         }else{
           *pBehand=‘0‘;
           *(--pBehand)=‘2‘;
           *(--pBehand)=‘%‘;
         }
         if(pFront==pStr)
            break ;
         pBehand--;
         pFront--;
      }
      //结尾
      *(pStr+nLen-1+nSpace*2+1)=‘\0‘;
}

好了 就写到这里。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-27 07:59:47

关于有序二维矩阵查找和字符串替换的两道算法题的相关文章

20140920百度笔试题一道之二维矩阵查找

题目: 有这样一个二维矩阵A[N][N],满足j < k时, 1)a[i][j] < a[i][k]; 2)a[j][i] < a[k][i](其实就数据从左上角到右下角纵横方向上都递减),给定一个数target,如何快速搜索是否在这个矩阵中,是的话输出二维坐标,否则输出Null:(不妨假设数据不重复) 比如  12  34  56  78  90  96 13  35  57  79  91  97 14  36  58  80  93  98 15  37  59  81  94  

Leetcode 240 Search a 2D Matrix II (二分法和分治法解决有序二维数组查找)

1.问题描述 写一个高效的算法,从一个m×n的整数矩阵中查找出给定的值,矩阵具有如下特点: 每一行从左到右递增. 每一列从上到下递增. 2. 方法与思路 2.1 二分查找法 根据矩阵的特征很容易想到二分法,但是这是一个二维的矩阵,如何将问题转化为一维是关键.实际上我们可以根据矩阵的第一列确定值可能所在的行的范围(limu,limd),其中limu=0,使得matrix[0][0]≤matrix[i][0]≤matrix[limd][0],i∈[0,limd].而确定limd的值可以使用二分法.

search-a-2d-matrix(二维矩阵查找)

Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties: Integers in each row are sorted from left to right. The first integer of each row is greater than the last integer of the previous ro

search-a-2d-matrix——二维矩阵找数

题目描述 Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties: Integers in each row are sorted from left to right. The first integer of each row is greater than the last integer of the previo

lintcode 搜索二维矩阵

题目:搜索二维矩阵 描述: 写出一个高效的算法来搜索 m × n矩阵中的值. 这个矩阵具有以下特性: 每行中的整数从左到右是排序的. 每行的第一个数大于上一行的最后一个整数. 样例 考虑下列矩阵: [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] 给出 target = 3,返回 true ------------------------------------------- 开始用两个二分搜索,先找列,再找行.运行后提示超时... 1 c

LeetCode 240. 搜索二维矩阵 II (C#实现)——二分查找,分治法

问题:https://leetcode-cn.com/problems/search-a-2d-matrix-ii/ 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18,

lintcode 容易题:Search a 2D Matrix 搜索二维矩阵

题目: 搜索二维矩阵 写出一个高效的算法来搜索 m × n矩阵中的值. 这个矩阵具有以下特性: 每行中的整数从左到右是排序的. 每行的第一个数大于上一行的最后一个整数. 样例 考虑下列矩阵: [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] 给出 target = 3,返回 true 挑战 O(log(n) + log(m)) 时间复杂度 解题: 1.最简单的方法就是遍历整个矩阵,时间复杂度:O(log(mn)),这个应该等于O(long(

[LeetCode] Search a 2D Matrix 搜索一个二维矩阵

Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties: Integers in each row are sorted from left to right. The first integer of each row is greater than the last integer of the previous ro

lintcode 中等题:search a 2d matrix II 搜索二维矩阵II

题目 搜索二维矩阵 II 写出一个高效的算法来搜索m×n矩阵中的值,返回这个值出现的次数. 这个矩阵具有以下特性: 每行中的整数从左到右是排序的. 每一列的整数从上到下是排序的. 在每一行或每一列中没有重复的整数. 样例 考虑下列矩阵: [     [1, 3, 5, 7],     [2, 4, 7, 8],     [3, 5, 9, 10] ] 给出target = 3,返回 2 挑战 要求O(m+n) 时间复杂度和O(1) 额外空间 解题 直接遍历,时间复杂度是O(MN) public