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日

相关文章

  • 2020年最新版Java面试题大全

    2020年最新版Java面试题大全 完整攻略 简介 Java 是非常热门的编程语言,许多公司招聘时也会优先考虑 Java 开发人员。而 Java 面试的难度也不容小觑,需要对 Java 语言及其相关技术有深入了解。本文将介绍一些主要的 Java 面试题,以及回答这些问题的攻略。 面试题 Q1:Java中的数据类型有哪些? Java 中的数据类型主要包括基本数…

    Java 2023年5月30日
    00
  • Spring中SmartLifecycle的用法解读

    我将为你详细讲解“Spring中SmartLifecycle的用法解读”。 什么是SmartLifecycle? Spring Framework提供了一种SmartLifecycle接口,可以让我们以编程方式在application context中进行初始化和关闭操作,并在这两个过程中有更精细的控制。 该接口具有一些主要的生命周期方法: isAutoSt…

    Java 2023年5月19日
    00
  • Spring Integration概述与怎么使用详解

    Spring Integration概述 Spring Integration是Spring框架的一个扩展,提供了一种集成不同系统、应用、协议和数据格式的方式。它提供了许多现成的组件和模板,使得实现企业级集成变得更加便捷和高效。 Spring Integration采用基于消息的异步通信模型,所有的组件都是被设计成异步的最终接收者,而消息则负责在组件之间传递…

    Java 2023年5月19日
    00
  • java连接Oracle数据库的方法解析

    下面是Java连接Oracle数据库的方法解析的完整攻略。 一、准备工作 1.1 下载Oracle JDBC驱动 在Java连接Oracle数据库之前,需要先下载Oracle JDBC驱动程序,可以前往Oracle官网进行下载。 1.2 配置Oracle环境变量 将Oracle的安装目录加入环境变量中,以便Java程序能够正常连接Oracle数据库。 二、J…

    Java 2023年5月19日
    00
  • SpringBoot环境Druid数据源使用及特点

    下面是关于SpringBoot环境中Druid数据源使用及特点的详细攻略。 1. 什么是Druid Druid是阿里巴巴开源的数据连接池。相比于传统的连接池,Druid具有更好的扩展性和稳定性。同时,它还提供了多种功能强大的监控和统计特性,如监控SQL执行情况、打印SQL慢日志等。 2. 如何在SpringBoot中使用Druid数据源 2.1 引入依赖 首…

    Java 2023年5月20日
    00
  • Java实现JDBC连接数据库简单案例

    下面我将详细讲解Java实现JDBC连接数据库简单案例的完整攻略。 第一步:导入JDBC驱动 JDBC驱动包可以从官网下载,下载完成后需要将其导入到项目中。导入方式有两种,分别是将其放入CLASSPATH中或者将其直接加入项目中,本文采用第二种方式。 第二步:建立数据库连接 在Java中使用JDBC驱动连接数据库,需要调用驱动程序提供的DriverManag…

    Java 2023年5月19日
    00
  • 通过idea创建Spring Boot项目并配置启动过程图解

    下面我来详细讲解如何通过idea创建SpringBoot项目并配置启动过程图解。 1. 创建SpringBoot项目 首先打开idea,点击菜单中的File -> New -> Project,在弹出的窗口中选择Spring Initializr,然后填写项目信息: Group:项目所在组织的groupId; Artifact:项目的名字,对应于…

    Java 2023年5月15日
    00
  • 200行Java代码如何实现依赖注入框架详解

    下面是详细的回答。 200行Java代码如何实现依赖注入框架详解 依赖注入(Dependency Injection,DI)是一个常见的设计模式,它的主要作用是解除组件之间的耦合关系,提高代码的可维护性和可测试性。Java中有很多流行的依赖注入框架,例如Spring,Guice等,这些框架虽然功能强大,但也比较复杂,对于初学者来说可能会造成困扰。因此,本文将…

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