剑指offer

剑指offer-java(一)

2019-06-14  本文已影响130人  Mouse_Hang

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;
    }
}
上一篇下一篇

猜你喜欢

热点阅读