剑指offerJava版每日两题——第二天

加油!!!

自助者,天助之。

自弃者,天弃之。

第三题

public class offer3 {
    /*题目
    * 在一个二维数组中,每一行从左到右递增,每一列从上到下递增
    * 输入一个二维数组和目标值,判断数组是否含有该目标值
    * */

    /* 分析
     * 到右下角都是递增的,所以选一行列的最大值开始查找,即右上或者左下
     * 
     * 左下角思路:
     *
     * 因为是递增,所以判断比原来元素大还是小,直接移动列或行
     * 在一列看,只要比他小就上移动,因为最左边一列就是各行最小值,目标值小了就直接排除,进入上        
     * 一行
     * 一旦目标数比左下角的大,就不可能在等于左边那一列,因为它比所有的都大了,所以直接排除左边    
     * 那列,直接向右移动
     * 
     * */

    public static boolean find(int [][] array, int target){
        //判断数组存在
        if(array == null)
            return  false;

        int row = 0;
        int colum = array[0].length-1;

        while(row < array.length && colum >= 0 ){
            if(array[row][colum] == target)
                return true;
            if(array[row][colum] > target){
                colum--;
            }else {
                row++;
            }
        }
        return false;
    }

    public static void main (String args[] ){
        int [][] array ={{1,2,3,4,5},{2,3,4,5,6},{4,5,6,7,8}};
        System.out.println("======"+ find(array,1));
    }

}

第四题

public class offer4 {
/*题目
* 将一个字符串中的空格替换为 "%20"
* */

/*思路与注意点
* 1.循环比较字符串单个字母,空格追加“%20”,否则追加字母
* 2.在组成新的字符串的过程中,大量字符串组成String效率太低,采用StringBuilder,StringBuffer
*
* */
    public static String replacerSpace(String str){

        if(str == null)
            return  null;

        StringBuilder sb = new StringBuilder();

        for(int i = 0; i < str.length(); i++){

            if(String.valueOf(str.charAt(i)).equals(" ")){
                sb.append("%20");
            }else {
                sb.append(str.charAt(i));
            }
        }

        return String.valueOf(sb);
    }

    public static void main(String[] args){
        System.out.print(replacerSpace("hello w o r l d "));
    }
}

猜你喜欢

转载自blog.csdn.net/dadajixxx/article/details/84783260
今日推荐