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

yizhihongxing

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如何读取Excel数据

    读取Excel数据是Java开发中常见的任务。下面是完整的攻略: 1. 导入依赖 要读取Excel数据,需要导入Apache POI依赖。可以在pom.xml文件中添加以下依赖项: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi&lt…

    Java 2023年5月20日
    00
  • Spring MVC整合 freemarker及使用方法

    Spring MVC是一款非常流行的MVC框架,而Freemarker是一款优秀的模板引擎,两者的整合可以使得我们在Web开发中处理模板更加高效、简便。以下是Spring MVC整合Freemarker的攻略及使用方法。 引入依赖 在pom文件中引入freemarker和spring-webmvc依赖: <dependency> <grou…

    Java 2023年5月20日
    00
  • dubbo将异常转换成RuntimeException的原因分析 ExceptionFilter

    下面详细讲解“dubbo将异常转换成RuntimeException的原因分析 ExceptionFilter”的完整攻略。 1. 什么是 ExceptionFilter ExceptionFilter 是 Dubbo 服务框架中的一个异常过滤器(Exception Filter),用于将 Dubbo 异常转换成 Spring 框架的异常,以便将 Dubbo…

    Java 2023年5月27日
    00
  • 浅析idea生成war包放入tomcat的路径访问问题

    下面是“浅析idea生成war包放入tomcat的路径访问问题”的完整攻略。 1. 生成WAR包 首先在IDEA中生成WAR包,步骤如下: 点击菜单栏中的 “Build” -> “Build Project” 或者使用快捷键 Ctrl + F9。 在 IDEA 底部状态栏查看构建过程是否成功。 在项目工程根目录下的 target 文件夹中找到生成的WA…

    Java 2023年5月19日
    00
  • springboot @Controller和@RestController的区别及应用详解

    Spring Boot @Controller和@RestController的区别及应用详解 在Spring Boot中,@Controller和@RestController是两个常用的注解,用于处理HTTP请求。虽然它们都可以用于处理请求,但它们之间有一些区别。在本文中,我们将详细讲解@Controller和@RestController的区别及应用详…

    Java 2023年5月15日
    00
  • Netty分布式固定长度解码器实现原理剖析

    Netty分布式固定长度解码器实现原理剖析 什么是Netty分布式固定长度解码器 Netty是一个开源、高性能、异步事件驱动的网络应用框架。在Netty中,解码器是十分重要的一部分,它们负责将字节流解析为Java对象。 Netty分布式固定长度解码器,顾名思义,是一种针对分布式系统应用的固定长度数据解码器。 Netty分布式固定长度解码器的实现原理 Nett…

    Java 2023年5月20日
    00
  • spring-boot 如何实现单次执行程序

    Spring Boot 如何实现单次执行程序 在本文中,我们将详细讲解如何使用Spring Boot实现单次执行程序。我们将介绍两种不同的方法来实现这个目标,并提供示例来说明如何使用这些方法。 方法一:使用CommandLineRunner接口 Spring Boot提供了CommandLineRunner接口,它可以在Spring Boot应用程序启动时执…

    Java 2023年5月18日
    00
  • 微信小程序实时聊天WebSocket

    下面为您详细讲解“微信小程序实时聊天WebSocket”的完整攻略。 一、前期准备 了解WebSocket协议的基础知识,包括握手过程、消息格式等; 了解微信小程序基础知识,包括小程序开发、页面结构、组件等; 确保开发环境已经安装好,包括微信web开发者工具、编辑器等。 二、创建WebSocket连接 微信小程序提供了wx.connectSocket() A…

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