Java面试题冲刺第二十三天–算法(2)

Java面试题冲刺第二十三天--算法(2)

本文将介绍算法练习题目以及解题思路,帮助考生提升算法编程实战水平。以下为本文题目及解法。

题目1:二叉树的遍历

题目描述

有一个二叉树,请实现一个函数按照中序遍历,将节点中的数字打印出来,每个数字后面都跟着一个空格。

解题思路

二叉树的中序遍历是指:先遍历左子树,然后访问根结点,最后遍历右子树。对于这个题目,可以分为以下步骤:

  1. 如果当前节点是null,则返回
  2. 遍历左子节点
  3. 打印当前节点的值及一个空格
  4. 遍历右子节点

根据上述思路可得,这个题目可以通过递归的方式来实现。具体的代码实现如下:

public static void inOrder(TreeNode root) {
    if (root == null) {
        return;
    }
    inOrder(root.left);
    System.out.print(root.val + " ");
    inOrder(root.right);
}

示例说明

以以下二叉树为例:

      1
     / \
    2   3
   / \
  4   5

中序遍历输出结果为:4 2 5 1 3

题目2:字符串中第一个只出现一次的字符

题目描述

在一个字符串中找到第一个只出现一次的字符,并返回它的位置。字符串只包含 ASCII 码字符。

解题思路

该题目可以通过遍历字符串并使用hash表记录每个字符出现的次数来解决。具体思路如下:

  1. 创建一个hash表用于记录每个字符出现的次数(表的key为字符,value为此字符出现次数)
  2. 遍历字符串,在hash表中记录每个字符出现次数
  3. 再次遍历字符串,找到hash表中value为1的字符

代码实现如下:

public static int firstNotRepeatingChar(String str){
    if(str == null || str.length() == 0){
        return -1;
    }
    Map<Character,Integer> map = new HashMap<Character,Integer>();
    for(char c:str.toCharArray()){
        if(map.containsKey(c)){
            map.put(c,map.get(c)+1);
        } else {
            map.put(c,1);
        }
    }
    for(int i = 0;i < str.length();i++){
        if(map.get(str.charAt(i)) == 1){
            return i;
        }
    }
    return -1;
}

示例说明

如果输入字符为:"abaccdeff",则输出为:1,即字符"b"第一次出现且只出现一次的位置。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java面试题冲刺第二十三天–算法(2) - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Java工具之ja-netfilter 2022.1 配置教程

    Java工具之ja-netfilter 2022.1 配置教程 简介 ja-netfilter 是一款基于 Java 开发的网络过滤工具,它能够实现网络数据包的过滤、转发、拦截等功能。本教程将详细介绍该工具的配置过程。 安装 首先需要安装 Java 运行环境,官方推荐使用 Java 8 或更高版本。 下载最新版本的 ja-netfilter,可以从官方网站h…

    Java 2023年5月27日
    00
  • Java实现统计字符串出现的次数

    下面来详细讲解Java实现统计字符串出现次数的完整攻略。 1. 获取待统计的字符串和要统计的字符 首先需要从用户那里获取到待统计的字符串和要统计的字符,可以使用Scanner类进行输入。示例代码如下: Scanner sc = new Scanner(System.in); System.out.println("请输入待统计的字符串:"…

    Java 2023年5月27日
    00
  • SpringMvc框架的简介与执行流程详解

    以下是关于“SpringMVC框架的简介与执行流程详解”的完整攻略,其中包含两个示例。 1. 前言 SpringMVC是一种常用的Java Web开发框架,它基于MVC(Model-View-Controller)模式,将Web应用程序分为三个部分:模型、视图和控制器。本攻略将详细讲解SpringMVC框架的简介和执行流程。 2. 简介 SpringMVC框…

    Java 2023年5月16日
    00
  • 直接内存的作用是什么?

    直接内存是一种在Java中使用NIO(New Input/Output)时可以使用的内存区域。与Java堆内存不同,直接内存不受Java堆大小的限制,可以使用操作系统的内存,因此可以提高I/O操作的效率。在Java中,可以使用ByteBuffer类来操作直接内存。 以下是直接内存的完整使用攻略: 分配直接内存 在Java中,可以使用ByteBuffer类的a…

    Java 2023年5月12日
    00
  • java中List对象排序通用方法

    请允许我详细讲解一下“Java中List对象排序通用方法”的完整攻略。 一、List对象排序的基本思路 在Java中,List是一种常见的集合类型,可以用来存储一组数据。在实际开发过程中,我们会遇到需要对List中的数据进行排序的需求。通用的 List 对象排序方法需要以下步骤: 对于自定义对象,需要实现 Comparable 接口或者传入一个 Compar…

    Java 2023年5月26日
    00
  • jsp操作MySQL实现查询/插入/删除功能示例

    我将为您详细讲解“jsp操作MySQL实现查询/插入/删除功能示例”的完整攻略。 一、准备工作 1. 安装MySQL数据库 首先要确保您已经安装了MySQL数据库,并且设置好登录账户和密码。 2. 导入MySQL驱动jar包 在项目中导入MySQL的Java驱动jar包,这个驱动包是用于和MySQL数据库进行交互的工具。 3. 创建MySQL数据库和表 在M…

    Java 2023年6月15日
    00
  • SpringBoot使用Spring-Data-Jpa实现CRUD操作

    下面我来为你讲解如何在SpringBoot中使用Spring-Data-Jpa实现CRUD操作。 一、什么是Spring-Data-Jpa Spring-Data-JPA是Spring Data家族中的一个模块,它基于JPA规范,提供了对JPA的支持。它简化了数据访问层的开发,提升了数据访问的效率。通过Spring-Data-Jpa可以轻松实现对关系型数据库…

    Java 2023年5月20日
    00
  • java 将 list 字符串用逗号隔开拼接字符串的多种方法

    下面是详细讲解“java 将 list 字符串用逗号隔开拼接字符串的多种方法”的完整攻略: 1. 使用 StringJoiner 在 Java 8 中新增了 StringJoiner 类,可以方便地将集合中的元素用指定的分隔符拼接成字符串。示例代码如下: List<String> list = new ArrayList<>(); l…

    Java 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部