1、二维数组中的查找
题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路:
1)遍历数组,查找是否含有该整数
public class Solution {
public boolean Find(int target, int [][] array) {
int leng = array.length;
boolean b = false;
a: for(int i=0; i<leng; i++) {
for(int j=0; j<array[i].length; j++) {
if(target == array[i][j]) {
b = true;
break a;
}
}
}
return b;
}
}
2)在每一行数组中使用二分法进行查找
public class Solution {
public boolean Find(int target, int [][] array) {
//利用二分法查找
int leng = array.length;
boolean jud = false;
for(int i=0; i<leng; i++) {
int max = array[i].length - 1;
int min = 0;
while(min <= max){
int avg = (max + min) / 2;
if(array[i][avg] == target) {
jud = true;
break ;
}else if(target < array[i][avg]) {
max = avg - 1;
}else {
min = avg + 1;
}
}
}
return jud;
}
}
3)利用数组特性,从数组的左下角元素array[row][column]开始判断,若target小于array[row][column],则说明target在array[row][column]所在行的上方,则row-1;若target大于array[row][column],则说明target在array[row][column]所在列的右方,则column+1。
public class Solution {
public boolean Find(int target, int [][] array) {
int row = array.length-1;
int column = 0;
while(row>=0 && column<array[0].length) {
if(target<array[row][column]) {
row--;
}else if(target == array[row][column]) {
return true;
}else {
column++;
}
}
return false;
}
}
2、替换空格
题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解题思路:
遍历字符串,判断该字符是否为空格,若为空格,将其替换为“%20”。
public class Solution {
public String replaceSpace(StringBuffer str) {
for(int i=0; i<str.length(); i++) {
if(str.charAt(i) == ' ') {
str.replace(i,i+1,"%20");
}
}
String s = new String(str);
return s;
}
}
网友评论