您的位置:首页 > Web前端

剑指offer 算法(数组 字符串)

2015-08-15 19:28 267 查看
题目描述

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

解析:解题思路:从二维数组的右上角的元素开始判断,因为此元素是它所在行的最大数,是它所在的列的最小数。如果它等于要查找的数字,则查找过程结束。如果它大于要查找的数字,则可以排除它所在的列。如果它小于要查找的数字,则可排除它所在的行。这样如果要查找的数字不在数组的右上角,则每次判断都可以排除一行或一列以缩小查找范围,直到找到要查找的数字,或者查找范围为空。

class Solution {
public:
bool Find(vector<vector<int> > array,int target) {
if(array.empty())
return false;
int row=array.size();
int col=array[0].size();
int i=0,j=0;
//if(target<array[0][0]||target>array[row-1][col-1])
//    return false;
//else
//{
i=0;j=col-1;
while(i<row&&j>=0)
{
if(array[i][j]==target)
return true;
else if(target<array[i][j])
{
j--;
}
else
{
i++;
}
}
return false;
//}

}
};
题目描述

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解析:逐个判断,当存在空格,截断字符串,分为空格前和空格后,之后连接“空格前串”+“%20”+“空格后串”,赋予原串。

class Solution {
public:
void replaceSpace(char *str,int length) {
int length1=strlen(str);
char space[]=" ";
char cat[]="%20";
char *temp;
int length2;
char final[256];
while(strstr(str,space)!=NULL)
{
temp=strstr(str,space);
length2=strlen(temp);
memcpy(&final,str,(length1-length2));
final[(length1-length2)]='\0';
strcat(final,cat);
strcpy(temp,(temp+1));
temp[length2]='\0';
strcat(final,temp);
strcpy(str,final);
length1=length1+2;;
}
//cout<<str<<endl;
}
};


补充:坑爹的题目也不指明length是原str串最大长度~~还有,有点疑惑,我的这种办法当遇到连续两个空格是能成功替换,但最后会报错,why?why?why?在VC++6.0会出问题,codeblocks就没问题。。。string库的问题吗,因为codeblocks用的是cstring~~~看别人的办法,都是先数空格个数,再补充str长度,之后从后往前复制,当遇到空格就用“%20”替换,直到串首
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: