华为OD E卷(100分)21-传递悄悄话

前言

工作了十几年,从普通的研发工程师一路成长为研发经理、研发总监。临近40岁,本想辞职后换一个相对稳定的工作环境一直干到老, 没想到离职后三个多月了还没找到工作,愁肠百结。为了让自己有点事情做,也算提高一下自己的编程能力,无聊之余打算用一些大厂的编程题练练手。希望通过这些分享能够帮到一些人,也希望能和看到此文的大神们沟通交流,提升自己,更希望在此期间能够找到一份理想的工作。

题目描述

给定一个二叉树,每个节点上站一个人,节点数字表示父节点到该节点传递悄悄话需要花费的时间。

初始时,根节点所在位置的人有一个悄悄话想要传递给其他人,求二叉树所有节点上的人都接收到悄悄话花费的时间。

输入

给定二叉树

0 9 20 -1 -1 15 7 -1 -1 -1 -1 3 2

注: -1 表示空节点

输出

返回所有节点都接收到悄悄话花费的时间

38

示例

示例1

输入:

0 9 20 -1 -1 15 15 7 -1 -1 -1 -1 3 2
输出:

38

解题思路

使用 深度优先搜索 (DFS) 来解决此问题,递归遍历整棵树,计算从根节点传递到最远叶子节点的时间。

题解

Java实现

java 复制代码
package huawei.e100;

import java.util.Scanner;

/**
* @author arnold
* @date 2024年12月14日
*/
public class T21 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()) {
			String[] tmp = sc.nextLine().split(" ");
			int[] data = new int[tmp.length];
			// 最大消耗时间即为传递时间
			int maxTime = getTime(data, 0);
			System.out.println(maxTime);
		}

	}
	
	static int getTime(int[] data, int index){
		if(index >= data.length) {
			return 0;
		}
		// 二叉树左支 坐标 index*2+1 
		int left = getTime(data, index*2 + 1);
		// 二叉树右支 坐标 index*2+2
		int right = getTime(data, index*2 + 2);
		
		// 通过递归获取最大值
		int max = Math.max(left, right);
		
		return data[index] + max;
	}

}
相关推荐
周杰伦_Jay36 分钟前
【 RocketMQ 全解析】分布式消息队列的架构、消息转发与快速实践、事务消息
分布式·算法·架构·rocketmq·1024程序员节
sprintzer1 小时前
10.16-10.25力扣计数刷题
算法·leetcode
王哈哈^_^1 小时前
【数据集】【YOLO】【目标检测】建筑垃圾数据集 4256 张,YOLO建筑垃圾识别算法实战训推教程。
人工智能·深度学习·算法·yolo·目标检测·计算机视觉·数据集
CoovallyAIHub1 小时前
不看异常,怎么学会识别异常?用“异常”指导异常检测!——NAGL方法解析(附代码地址)
深度学习·算法·计算机视觉
共享家95272 小时前
数据结构-并查集
数据结构·c++·算法
IT古董2 小时前
【第五章:计算机视觉-项目实战之推荐/广告系统】2.粗排算法-(2)理解粗排模型之离线部分:双塔模型结构精讲及实现
人工智能·算法·计算机视觉
茉莉玫瑰花茶2 小时前
贪心 - 后篇
算法
m0_748233642 小时前
【C++篇】C++11入门:踏入C++新世界的大门
java·c++·算法
lxmyzzs2 小时前
【图像算法 - 31】基于深度学习的太阳能板缺陷检测系统:YOLOv12 + UI界面 + 数据集实现
人工智能·深度学习·算法·yolo·缺陷检测
lxmyzzs2 小时前
【图像算法 - 32】基于深度学习的风力发电设备缺陷检测系统:YOLOv12 + UI界面 + 数据集实现
深度学习·算法·yolo·计算机视觉