题目描述
1、在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解决思路:
(1)原始解法,从左到右,从上到下依次比较,直到找到该整数或者全部比较完。
(2)优化解法:利用数组的有序递增特点,从左下角开始比较,比数大,右移;比数小,上移(直接跳过一行),直到找到该数,越界则表示整数不在数组中。
原始解法代码C++:
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
int m = array.size();
int n= array[0].size();
int i,j;
for(i=0;i<m;i++){
for(j=0;j<n;j++){
if(target==array[i][j])
return true ;
else
continue;
}
}
return false;
}
};
优化解法代码C++:
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
int m = array.size();
int n= array[0].size();
int i,j;
i = m-1;
j=0;
while(i>=0&&i<m&&j>=0&&j<n){
if(target==array[i][j])
return true;
else if(target<array[i][j])
i--;
else
j++;
}
return false;
}
};
题目描述
2、请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解题思路:
(1)直接利用JAVA或者其他函数自带的函数库完成替换
(2)分析字符串,先从前往后遍历统计空格个数,再从后往前替换。注意点:替换后的字符总数应当<=length长度,最后一位应为’\0’
解法1代码(JAVA):
public class Solution {
public String replaceSpace(StringBuffer str) {
return str.toString().replaceAll(" " , "%20");
}
}
解法2代码(C++):
class Solution {
public:
void replaceSpace(char *str,int length) {
int i=0,j=0,count=0;
int newlen=0,oldlen = 0;
while(str[i]!='\0'){
if(str[i]==' ')
{
count++;//先统计空格个数
}
else
oldlen++;//统计非空格字母个数
i++;
}
newlen=oldlen+count*3;//替换后字符串总长度
oldlen +=count;//原字符串有效字母加空格总长度
if(newlen>length)//替换后总长度小于字符串数组长度,不符合
return;
//注意结尾有个'\0',因此不需要从oldlen-1开始
while(newlen>=0){
if(str[oldlen]==' '){//字符为空格时:从后往前替换
str[newlen--]='0';
str[newlen--]='2';
str[newlen--]='%';
oldlen--;//前移
}
else{
str[newlen--]=str[oldlen--];
}
}
}
};