1.二维数组的查找
1. 题目
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
2. 思路
利用二维数组由上到下,由左到右递增的规律,那么选取右上角或者左下角的元素a[row][col]与target进行比较,当target小于元素a[row][col]时,那么target必定在元素a所在行的左边,即col–;当target大于元素a[row][col]时,那么target必定在元素a所在列的下边,即row++;直到找到target与a[row][col]相等时返回true;若遍历完所有的均没有查找到,则返回false。
3. 代码
public class Solution {
public boolean Find(int target, int [][] array) {
int row=0;
int col=array[0].length-1;
while(row<=array.length-1&&col>=0){
if(target==array[row][col])
return true;
else if(target>array[row][col])
row++;
else
col--;
}
return false;
}
}
4. 知识总结
(1)得到一个二维数组的列数的方法:int col=array[0].length;
(2)得到一个二维数组的行数的方法:int col=array.length;
2.替换空格
1. 题目
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
2. 思路
两种思路:
(1)从后往前记录
首先统计出含有的空格数,通过str.charAt(i)==’ '的方法转化为字符与空字符进行对比,统计出空格个数spacenum;
再计算出替换前的str下标indexOld和采用%20替换后的str下标indexNew;
对原字符串进行扩容至新字字符串大小;
从后往前遍历原字符串,当为空字符时则用%20进行替代,不是则复制原字符串位置元素;
最后将其转化为字符串进行返回。
本方法在事前已经获得改变后的字符串大小 ,所有元素只需要移动一次,效率相对高效。
(2)从前往后记录
新开辟一个StringBuffer,循环遍历字符串在i位置的字符所对应的字符串形式与空字符串是否相同,相同则进行替换out.append("%20");最后将其变成字符串形式 out.toString()。
该方法每次进行变换时,字符串中每个字符位置都将进行移动,效率将比第一种方法低。
3. 代码
从后往前记录
public class Solution {
public String replaceSpace(StringBuffer str) {
int spacenum = 0;//spacenum为计算空格数
for(int i=0;i<str.length();i++){
if(str.charAt(i)==' ')
spacenum++;
}
int indexold = str.length()-1; //indexold为为替换前的str下标
int newlength = str.length() + spacenum*2;//计算空格转换成%20之后的str长度
int indexnew = newlength-1;//indexold为为把空格替换为%20后的str下标
str.setLength(newlength);//使str的长度扩大到转换成%20之后的长度,防止下标越界
for(;indexold>=0 && indexold<newlength;--indexold){
if(str.charAt(indexold) == ' '){ //
str.setCharAt(indexnew--, '0');
str.setCharAt(indexnew--, '2');
str.setCharAt(indexnew--, '%');
}else{
str.setCharAt(indexnew--, str.charAt(indexold));
}
}
return str.toString();
}
}
从前往后记录
public class Solution {
public String replaceSpace(StringBuffer str){
StringBuffer out=new StringBuffer();
for(int i=0;i<str.toString().length();i++){
char b=str.charAt(i);
if(String.valueOf(b).equals(" ")){
out.append("%20");
}else{
out.append(b);
}
}
return out.toString();
}
}
5. 知识总结
(1)得到字符串在i位置的字符,方法为str.charAt(i);
(2)StringBuffer具有动态扩展str.setLength(newlength) 方法、更换某某一位置字符str.setCharAt(indexnew–, ‘0’) 方法、添加内容out.append(b) 方法。在对字符串执行字符变更(替换、添加操作时可以考虑StringBuffer类);
(3)在对字符串进行变更操作时可以采用将其变换成字符str.charAt(i) 进行操作(类似数组的操作),也可以将棋直接在字符串进行替换操作String.valueOf(b).equals(" ")。
https://www.nowcoder.com/profile/220316641/codeBookDetail?submissionId=44600861