美文网首页剑指offer
剑指offer-java(一)

剑指offer-java(一)

作者: Mouse_Hang | 来源:发表于2019-06-14 15:38 被阅读130次

    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;
        }
    }
    

    相关文章

      网友评论

        本文标题:剑指offer-java(一)

        本文链接:https://www.haomeiwen.com/subject/ddzufctx.html