力扣每日一题 在受污染的二叉树中查找元素 哈希 DFS 二进制

Problem: 1261. 在受污染的二叉树中查找元素在这里插入图片描述

思路

👨‍🏫 灵神题解

💖 二进制

  • 时间复杂度:初始化为 O ( 1 ) O(1) O(1);find 为 O ( m i n ( h , l o g 2 t a r g e t ) O(min(h,log_2target) O(min(h,log2target),其中 h 为二叉树的高度
  • 空间复杂度: O ( 1 ) O(1) O(1)
class FindElements {private TreeNode root;public FindElements(TreeNode root) {this.root = root;}public boolean find(int target) {target++;TreeNode cur = root; // 从根节点出发for (int i = 30 - Integer.numberOfLeadingZeros(target); i >= 0; i--) { // 从次高位开始枚举int bit = (target >> i) & 1; // target 第 i 位的比特值cur = bit == 0 ? cur.left : cur.right;if (cur == null) { // 走到空节点,说明 target 不在二叉树中return false;}}return true; // 没有走到空节点,说明 target 在二叉树中}
}

在这里插入图片描述

💖 哈希表

复杂度分析

  • 时间复杂度:初始化为 O ( n ) O(n) O(n),其中 n n n 为二叉树的节点个数。find 为 O ( 1 ) O(1) O(1)
  • 空间复杂度: O ( n ) O(n) O(n)
class FindElements {private final Set<Integer> s = new HashSet<>();public FindElements(TreeNode root) {dfs(root, 0);}public boolean find(int target) {return s.contains(target);}private void dfs(TreeNode node, int val) {if (node == null) {return;}s.add(val);dfs(node.left, val * 2 + 1);dfs(node.right, val * 2 + 2);}
}

💖 暴力版

  • 时间复杂度:
    • 转换: O ( n ) O(n) O(n)
    • 查找: O ( n m ) O(nm) O(nm)
  • 空间复杂度: O ( n ) O(n) O(n)
/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class FindElements {TreeNode r;public FindElements(TreeNode root) {r = root;if(root == null) return;root.val = 0;dfs(root);}void dfs(TreeNode cur){if(cur == null)return;if(cur.left != null){cur.left.val = cur.val * 2 + 1;dfs(cur.left);}if(cur.right != null){cur.right.val = cur.val * 2 + 2;dfs(cur.right);}}boolean f(TreeNode cur, int x){if(cur == null)return false;if(cur.val == x)return true;if(f(cur.left,x) || f(cur.right,x))return true;return false;}public boolean find(int target) {return f(r,target);}
}/*** Your FindElements object will be instantiated and called as such:* FindElements obj = new FindElements(root);* boolean param_1 = obj.find(target);*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/740980.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字孪生与智慧城市:实现城市治理现代化的新路径

随着信息技术的迅猛发展&#xff0c;智慧城市已成为城市发展的必然趋势。数字孪生技术作为智慧城市建设的重要支撑&#xff0c;以其独特的优势为城市治理现代化提供了新的路径。本文将探讨数字孪生技术在智慧城市中的应用&#xff0c;以及如何实现城市治理的现代化。 一、数字…

Python 导入Excel三维坐标数据 生成三维曲面地形图(体) 5-3、线条平滑曲面且可通过面观察柱体变化(三)

环境和包: 环境 python:python-3.12.0-amd64包: matplotlib 3.8.2 pandas 2.1.4 openpyxl 3.1.2 scipy 1.12.0 代码: import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from scipy.interpolate import griddata fro…

leetcode2864--最大二进制奇数

1. 题意 给二进制串&#xff0c;求重新排列后的最大串。 2. 题解 统计1个数&#xff0c;将 C n t − 1 Cnt-1 Cnt−1个1放开头&#xff0c;其他除第0位都是0。 class Solution { public:string maximumOddBinaryNumber(string s) {int cnt count(s.begin(), s.end(), 1);r…

C#,红黑树(Red-Black Tree)的构造,插入、删除及修复、查找的算法与源代码

1 红黑树(Red-Black Tree) 如果二叉搜索树满足以下红黑属性,则它是红黑树: 每个节点不是红色就是黑色。根是黑色的。每片叶子(无)都是黑色的。如果一个节点是红色的,那么它的两个子节点都是黑色的。对于每个节点,从节点到后代叶的所有路径都包含相同数量的黑色节点。红…

HAProxy适配openGauss使用指导书

一、HAProxy 简介 HAProxy 是一个开源的项目&#xff0c;其代码托管在 Github 上&#xff0c;代码链接如下&#xff1a;HAProxy 代码链接。HAProxy 提供高可用性、负载均衡以及基于 TCP 和 HTTP 应用的代理&#xff0c;支持虚拟主机&#xff0c;它是免费、快速并且可靠的一种解…

机密计算:为云数据提供强大的安全性

在人工智能应用中&#xff0c;数据隐私是一个重要关注问题。在AI模型训练过程中&#xff0c;特别是在联邦学习等分布式学习场景中&#xff0c;云数据可能分布在不同的地方&#xff0c;包括用户设备、边缘服务器和云服务。机密计算是为人工智能开发中的安全和隐私保护提供基础的…

[Vue] 自定义命令

Vue 自定义命令 官方的vue命令包括&#xff1a;v-html v-if v-else v-show v-for等等为了提高效率&#xff0c;减少重复项编写&#xff0c;vue支持自定义命令&#xff0c;可以封装一些DOM操作&#xff0c;扩展额外的功能 语法 注册 全局注册 //在main.js中 Vue.directive(…

使用endnote插入引用文献导致word英文和数字变成符号的解决方案

使用endnote插入引用文献导致word英文和数字变成符号的解决方案 如图使用endnote插入引用文献导致word英文和数字变成符号字体Wingdings Wingdings 是一个符号字体系列&#xff0c;它将许多字母渲染成各式各样的符号&#xff0c;用途十分广泛。 **解决方法&#xff1a;**直接通…

Linux基础学习:常用命令

目录结构及其常用命令 处理目录的常用命令&#xff1a; ls &#xff1a;列出目录及文件名cd&#xff1a;切换目录pwd&#xff1a;显示目前的目录mkdir&#xff1a;创建一个新的目录rmdir&#xff1a;删除一个空的目录cp&#xff1a;复制文件或目录rm&#xff1a;删除文件或目录…

uni-app网络请求封装及发送

在看本篇文章之前&#xff0c;请先至少学会独立完成vue2项目 首先配置request.js const url_all {DEV: http://localhost:8888, // 开发// 生产 PRO: http://111.111.111.111:8080, }let BASEURL url_all[DEV] // 调整当前环境/** 全局请求封装* param path 请求路径* pa…

ROS2 Python导入三方库及自定义python程序

ROS2 Python导入三方库及自定义python程序 文章目录 前言正文导入三方库文件导入自定义python程序 前言 本文主要讲解ROS2建立pyhon包时如何导入三方库文件&#xff08;.so&#xff09;&#xff0c;及自定义的python程序。 正文 导入三方库文件 此处以Jaka驱动为例&#xf…

【3GPP】【核心网】【5G】NG接口介绍(超详细)

目录 1. NG接口定义 2. 接口原则和功能 3. NG 接口控制面 5. NG接口主要信令流程 6. NG SETUP过程 1. NG接口定义 NG接口指无线接入网与5G核心网之间的接口。在5G SA网络中&#xff0c;gNB之间通过Xn接口进行连接,gNB与5GC之间通过NG接口进行连接。NG接口分为NG-C接口和NG…

Python控制摄像头并获取数据文件

一、引言 摄像头作为计算机视觉领域的核心设备之一&#xff0c;广泛应用于视频监控、图像采集和数据处理等领域。通过Python编程语言&#xff0c;我们可以实现对摄像头的精确控制&#xff0c;包括摄像头的开启、关闭、参数设置以及数据获取等功能。本文将指导读者完成这些操作…

CVE-2023-38836 BoidCMSv.2.0.0 后台文件上传漏洞

漏洞简介 BoidCMS是一个免费的开源平面文件 CMS&#xff0c;用于构建简单的网站和博客&#xff0c;使用 PHP 开发并使用 JSON 作为数据库。它的安装无需配置或安装任何关系数据库&#xff08;如 MySQL&#xff09;。您只需要一个支持PHP 的Web服务器。在 BoidCMS v.2.0.0 中存…

【LLM知识】笔记

为什么现在的LLM以decoder-only为主 为什么现在的LLM都是Decoder only的架构&#xff1f; 回答一 回答二 encoder-decoder 常用于处理需要对输入和输出建立精确的映射关系的任务&#xff08;机器翻译、文本摘要等&#xff09;&#xff0c;更具有专业性优势 输入的语义理解会…

c#简易学生管理系统

https://pan.baidu.com/s/1kCPvWg8P5hvlf26nGf2vxg?pwdya45 ya45

Linux运维:磁盘分区与挂载详解

Linux运维&#xff1a;磁盘分区与挂载详解 1、磁盘分区的原理2、查看系统中所有的磁盘设备及其分区信息3、进行磁盘分区&#xff08;对于sdb新磁盘&#xff09;4、格式化分区5、挂载分区&#xff08;临时挂载、永久挂载&#xff09;6、取消挂载分区7、删除分区 &#x1f496;Th…

立式学习灯有什么讲究?大路灯原来要这样选,五大台灯分享!

立式学习灯作为近年来最适合照明的护眼家电&#xff0c;为用户提供了良好的光线环境&#xff0c;并且还能够减少光线带来的视觉疲劳感。然而&#xff0c;随着其销量的节节攀升商家为了谋取利润&#xff0c;市面上也涌现了很多劣质产品&#xff0c;这些产品普遍没有经过技术调教…

【AnaConda/MiniConda/Linux】使用sudo python或切换root管理员conda环境被绕过解决方案

写在前面 部分机型修改环境变量存在风险&#xff0c;可能用于被覆盖而出现大量命令无法找到的情况 可以输入这个解决 export PATH/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin往期相关内容 探索Miniconda3&#xff1a;简单、灵活的Python环境和…

LeetCode1261. Find Elements in a Contaminated Binary Tree

文章目录 一、题目二、题解 一、题目 Given a binary tree with the following rules: root.val 0 If treeNode.val x and treeNode.left ! null, then treeNode.left.val 2 * x 1 If treeNode.val x and treeNode.right ! null, then treeNode.right.val 2 * x 2 Now…