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

简介: 最近看一本书上写到的两个面试题 于是实现了一下 感觉思路很好,大牛略过 :1、对于一个二维矩阵,从左到右  从上到下 都是递增的,如何判断一个值是否在矩阵内部?(C实现  实现复杂度 O(n))bool FindInTwoDimensionalMatrix(int*pMatrix,int ...

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

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';
}

好了 就写到这里。


目录
相关文章
|
19天前
|
存储 算法
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
61 0
|
3月前
|
算法
【算法】滑动窗口——找到字符串中所有字母异位词
【算法】滑动窗口——找到字符串中所有字母异位词
|
5天前
|
并行计算 算法 IDE
【灵码助力Cuda算法分析】分析共享内存的矩阵乘法优化
本文介绍了如何利用通义灵码在Visual Studio 2022中对基于CUDA的共享内存矩阵乘法优化代码进行深入分析。文章从整体程序结构入手,逐步深入到线程调度、矩阵分块、循环展开等关键细节,最后通过带入具体值的方式进一步解析复杂循环逻辑,展示了通义灵码在辅助理解和优化CUDA编程中的强大功能。
|
24天前
|
算法
两个字符串匹配出最长公共子序列算法
本文介绍了最长公共子序列(LCS)问题的算法实现,通过动态规划方法求解两个字符串的最长公共子序列,并提供了具体的编程实现细节和示例。
55 1
两个字符串匹配出最长公共子序列算法
|
19天前
|
机器学习/深度学习 算法 搜索推荐
django调用矩阵分解推荐算法模型做推荐系统
django调用矩阵分解推荐算法模型做推荐系统
16 4
|
5月前
|
存储 算法 C语言
【数据结构与算法 刷题系列】合并两个有序链表
【数据结构与算法 刷题系列】合并两个有序链表
|
17天前
|
存储 算法
动态规划算法学习一:DP的重要知识点、矩阵连乘算法
这篇文章是关于动态规划算法中矩阵连乘问题的详解,包括问题描述、最优子结构、重叠子问题、递归方法、备忘录方法和动态规划算法设计的步骤。
70 0
|
3月前
|
算法 Java
掌握算法学习之字符串经典用法
文章总结了字符串在算法领域的经典用法,特别是通过双指针法来实现字符串的反转操作,并提供了LeetCode上相关题目的Java代码实现,强调了掌握这些技巧对于提升算法思维的重要性。
|
3月前
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
49 6
|
3月前
|
算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法