剑指offer(一)

    xiaoxiao2021-03-25  16

    剑指offer

    防止面试时候手写代码蒙蔽,开始刷下剑指offer 66道编程题==

    二维数组中的查找

    在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

    第一次提交代码:

    class Solution { public: bool Find(int target, vector<vector<int> > array) { int l1=array.size(); int l2=array[0].size(); int p=l2; for(int i=0;i<l1;i++) { for(int j=0;j<p;j++) { if(target==array[i][j]) return true; if(target<array[i][j]) { p=j; break; } } } return false; } };

    思路:因为矩阵从左到右,从上到下递增。按行遍历,找到大于目标数的位置,下一行只需遍历到此位置-1。

    最佳思路:矩阵是有序的,从左下角来看,向上数字递减,向右数字递增,因此从左下角开始查找,当要查找数字比左下角数字大时,右移;要查找数字比左下角数字小时,上移。

    class Solution { public: bool Find(int target, vector<vector<int> > array) { int l1=array.size(); int l2=array[0].size(); for(int i=l1-1,j=0;i>=0&&j<l2;) { if(target==array[i][j]) return true; else if(target<array[i][j]) { i--; } else { j++; } } return false; } }; 替换空格

    请实现一个函数,将一个字符串中的空格替换成“ ”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We Are Happy。

    思路:考察造轮子,char*的replace函数

    第一次提交代码:

    class Solution { public: void replaceSpace(char *str,int length) { for(int i=0;i<length;i++) { if(str[i]==' ') { length+=2; for(int j=length-1;j>i+2;j--) //后向前复制 { str[j]=str[j-2]; } str[i]='%'; str[i+1]='2'; str[i+2]='0'; } } } };

    最佳思路:从前往后检查,移动次数过多。从后往前插入,每个空格后面的字符只需要移动一次。

    class Solution { public: void replaceSpace(char *str,int length) { int replacenumber=0;//记录空格的数量 for(int i=0;i<length;i++) { if(str[i]==' ') { replacenumber++; } } int indexold=length-1; length=length+replacenumber*2;//插入后的长度 int indexnew=length-1; for(;indexold>=0&&indexnew>indexold;indexold--) { if(str[indexold]==' ') { str[indexnew--]='0'; str[indexnew--]='2'; str[indexnew--]='%'; } else { str[indexnew--]=str[indexold]; } } } };
    转载请注明原文地址: https://ju.6miu.com/read-200297.html

    最新回复(0)