首页 > 编程语言 >剑指Offer Java题解(前3道题)

剑指Offer Java题解(前3道题)

时间:2023-12-31 13:38:41浏览次数:31  
标签:道题 Java int 题解 查找 return array public columns


目录

1. 二维数组中的查找

2. 替换空格

3. 从尾到头打印链表


1. 二维数组中的查找

题目链接:传送

方法一,暴力枚举。

参考代码:

package problem01;

/**
 * @Author syrdbt
 * @Date 2019/7/3 14:05
 * 二维数组中的查找
 * 方法一,暴力枚举
 */
public class Solution {
    public boolean Find(int target, int [][] array) {
        if (array == null) {
            return false;
        }

        int rows = array.length;
        int columns = array[0].length;

        if(rows == 0 || columns == 0) {
            return false;
        }

        for (int i=0; i<rows; i++) {
            if (array[i][0] > target || array[i][columns-1]<target) {
                continue;
            }
            for (int j=0; j<columns; j++) {
                if (array[i][j] == target) {
                    return true;
                }
            }
        }
        return false;
    }
}

运行截图:

剑指Offer Java题解(前3道题)_二分查找

方法二,二分查找。

package problem01;

/**
 * @Author syrdbt
 * @Date 2019/7/12 14:57
 * 二维数组中的查找
 * 方法二,二分查找
 */
public class Solution01 {
    public boolean Find(int target, int [][] array) {
        if (null == array) {
            return false;
        }

        int rows = array.length;
        int columns = array[0].length;

        if(rows <= 0 || columns <= 0) {
            return false;
        }

        for (int i=0; i<rows; i++) {
            if (array[i][0] > target || array[i][columns-1]<target) {
                continue;
            }
            if(findInLine(target, array[i])) {
                return true;
            }
        }
        return false;
    }

    /**
     * 在一行中进行二分查找
     * @param target 目标值
     * @param array 一行数组
     * @return 查找到返回 true,否则返回 false
     */
    public boolean findInLine(int target, int [] array) {
        int right = array.length;
        int left = 0;
        int mid = (right+left)/2;
        while(left < right) {
            if(array[mid] < target) {
                left = mid+1;
            } else {
                right = mid;
            }
            mid = (left+right)/2;
        }
        if(array[left] == target) {
            return true;
        } else {
            return false;
        }
    }
}

运行截图:

剑指Offer Java题解(前3道题)_二分查找_02

方法三:从左下角,向上递减,向右递增。  如果当前数字比带查找值小,向右移动 , 如果当前数字比带查找值大,向上移动。

参考代码:

package problem01;

/**
 * @Author syrdbt
 * @Date 2019/7/12 15:00
 * 二维数组中的查找
 * 方法三,利用它的条件
 * 每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序
 * 从左下角,向上递减,向右递增。
 * 如果当前数字比带查找值小,向右移动
 * 如果当前数字比带查找值大,向上移动
 */
public class Solution02 {
    public boolean Find(int target, int[][] array) {
        if (null == array) {
            return false;
        }
        int rows = array.length;
        int columns = array[0].length;
        if (rows == 0 || columns == 0) {
            return false;
        }

        int i=rows-1, j=0;
        while (i>=0 && j<columns) {
            if (array[i][j] == target) {
                return true;
            } else if (array[i][j] < target) {
                ++j;
            } else {
                --i;
            }
        }
        return false;
    }
}

运行截图:

剑指Offer Java题解(前3道题)_i++_03

2. 替换空格

题目链接:传送

方法一:手写替换,使用 StringBuilder 。

package problem02;

/**
 * @Author syrdbt
 * @Date 2019/7/3 14:34
 */
public class Solution {
    public String replaceSpace(StringBuffer str) {
        StringBuilder result = new StringBuilder();
        for(int i=0; i<str.length(); i++) {
            if (str.charAt(i) == ' ') {
                result.append("%20");
            } else {
                result.append(str.charAt(i));
            }
        }
        return result.toString();
    }
}

运行截图:

剑指Offer Java题解(前3道题)_二维数组_04

方法二:string 的 replace 函数。

参考代码:

package problem02;

/**
 * @Author syrdbt
 * @Date 2019/7/12 15:47
 */
public class Solution01 {
    public String replaceSpace(StringBuffer str) {
        return str.toString().replaceAll(" ", "%20");
    }
}

运行截图:

剑指Offer Java题解(前3道题)_二分查找_05

3. 从尾到头打印链表

题目链接:传送

参考代码:

package problem03;

import java.util.ArrayList;

/**
 * @Author syrdbt
 * @Date 2019/7/12 15:58
 */

//class ListNode {
//    int val;
//    ListNode next = null;
//
//    ListNode(int val) {
//        this.val = val;
//    }
//}

public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        ArrayList<Integer> arrayList = new ArrayList<>();
        while (listNode != null) {
            arrayList.add(0, listNode.val);
            listNode = listNode.next;
        }
        return arrayList;
    }
}

运行截图:

剑指Offer Java题解(前3道题)_二维数组_06

标签:道题,Java,int,题解,查找,return,array,public,columns
From: https://blog.51cto.com/xuxiangyang/9047855

相关文章

  • 深度优先搜索(DFS) 学习、Java代码实现
    深度优先搜索(DFS) 的基本思想:从图中的某个顶点v出发,然后依次从未被访问的v 的邻接点开始深度优先搜索,直至图中所有和 v 路径相通的顶点都被访问,然后选择另外一个没有被访问的顶点开始深度优先搜索。 1. 概述 深度优先搜索(DFS) 的基本思想:从图中的某个顶点v出发,然后依次......
  • Java 自定义注解
    1. 元注解元注解是Java 提供的一些基本注解,使用这些元注解区可疑创建新的注解;可以先大致看一下元注解,然后去看后面自定义注解的例子。元注解有@Retention,@Documented,@Target,@Inherited,@Repeatable 五种。1.1 @Retention@Retention 可以定义注解的生命周期,注解的存活时......
  • Java 自定义类加载器
    1. 系统类加载器系统提供的类加载器有如下三种:启动类加载器, 扩展类加载器,引用程序类加载器。1.1 启动类加载器启动类加载器(BootstrapClassLoader)负责将存放在<JRE_HOME>\lib目录中的,或者被-Xbootclasspath参数所指定的路径中的,并且是虚拟机识别的(仅按照文件名识别,如rt.jar......
  • Java递归查询文件下所有的图片,移动到指定文件夹中,分批次建立子文件夹
    1.代码实例将/Users/shiheng/desktop/测试文件目录下的图片(包含子文件夹目录下的图片)移动到了/Users/shiheng/desktop/测试结果目录下,默认不分批次建立子文件夹,重名文件只保存一个,代码如下所示:packagecom.syrdbt.java.study;importjava.io.File;importjava.util.*;/**......
  • 无涯教程-Java 正则 - Matcher reset()函数
    java.util.regex.Matcher.reset()方法重置此匹配器。Matcherreset()-声明publicMatcherreset()Matcherreset()-示例下面的示例显示java.util.regex.Matcher.reset()方法的用法。packagecom.learnfk;importjava.util.regex.Matcher;importjava.util.regex.Pat......
  • 无涯教程-Java 正则 - Matcher int regionStart函数
    java.util.regex.Matcher.regionStart()匹配器区域的起始索引。intregionStart()-声明publicintregionStart()intregionStart()-示例下面的示例显示java.util.regex.Matcher.regionStart()方法的用法。packagecom.learnfk;importjava.util.regex.Matcher;imp......
  • 无涯教程-Java 正则 - String replaceAll(String replacement)函数
    java.util.regex.Matcher.replaceAll(Stringreplacement)方法使用给定的替换字符串替换与该模式匹配的每个子序列。StringreplaceAll-声明publicStringreplaceAll(Stringreplacement)replacement  - 替换字符串。StringreplaceAll-返回值通过用替换字符串替......
  • JavaWebDay10
    开发规范restful表属性状态转换,是一种软件架构风格,注意rest是风格为约定方式可以打破,藐视模块的功能通常使用复数加s,表示此类资源要有一个统一响应数据的格式通常用result实体类来封装当想给参数设置默认值可以使用@requestparam注解后括号接defaultvalue=“1” ......
  • Java 方法
    方法的定义与调用定义:Java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法的语法为:修饰符返回值类型方法名(参数类型参数名){ ... 方法体 ... return返回值;}修饰符:可选,告诉编译器如何调用该方法,定义了该方法的访问类型。......
  • 无涯教程-Java 正则 - Matcher static String quoteReplacement(String s)函数
    java.time.Matcher.quoteReplacement(Strings)方法返回指定字符串的文字替换字符串。staticStringquoteReplacement-声明publicstaticStringquoteReplacement(Strings)s  - 要被字符串化的字符串。staticStringquoteReplacement-返回值文字字符串替换。......