530. 二叉搜索树的最小绝对差 在java中,一个类里面的属性,直接定义在类下面和定义在该类的方法里,有什么区别

news2024/9/29 17:25:09

530. 二叉搜索树的最小绝对差

  • 原题链接:
  • 完成情况:
  • 解题思路:
  • 参考代码:
  • 错误经验吸取
    • 在java中,一个类里面的属性,直接定义在类下面和定义在该类的方法里,有什么区别???

原题链接:

530. 二叉搜索树的最小绝对差

https://leetcode.cn/problems/minimum-absolute-difference-in-bst/description/

完成情况:

在这里插入图片描述

解题思路:

package 代码随想录..二叉树;

import 代码随想录..TreeNode;

import java.util.ArrayDeque;
import java.util.Deque;

public class _530二叉搜索树的最小绝对差_迭代 {
    TreeNode prevNode;  //定义在这里,会有一个默认的空参构造器
    /**
     *
     * @param root
     * @return
     */
    public int getMinimumDifference(TreeNode root) {
        if (root == null){
            return 0;
        }
        Deque<TreeNode> myStack = new ArrayDeque<TreeNode>();

        TreeNode curNode = root;
        int result = Integer.MAX_VALUE;
        while (curNode != null || !myStack.isEmpty()) {
            if (curNode != null){
                myStack.push(curNode);
                curNode = curNode.left;
            }else {
                curNode = myStack.pop();
                if (prevNode != null){
                    result = Math.min(result,Math.abs(curNode.val - prevNode.val));
                }
                prevNode = curNode;
                curNode = curNode.right;
            }
        }
        return result;
    }
}

参考代码:

package 代码随想录..二叉树;

import 代码随想录..TreeNode;

import java.util.ArrayDeque;
import java.util.Deque;

public class _530二叉搜索树的最小绝对差_迭代 {
    TreeNode prevNode;  //定义在这里,会有一个默认的空参构造器
    /**
     *
     * @param root
     * @return
     */
    public int getMinimumDifference(TreeNode root) {
        if (root == null){
            return 0;
        }
        Deque<TreeNode> myStack = new ArrayDeque<TreeNode>();

        TreeNode curNode = root;
        int result = Integer.MAX_VALUE;
        while (curNode != null || !myStack.isEmpty()) {
            if (curNode != null){
                myStack.push(curNode);
                curNode = curNode.left;
            }else {
                curNode = myStack.pop();
                if (prevNode != null){
                    result = Math.min(result,Math.abs(curNode.val - prevNode.val));
                }
                prevNode = curNode;
                curNode = curNode.right;
            }
        }
        return result;
    }
}

错误经验吸取

在java中,一个类里面的属性,直接定义在类下面和定义在该类的方法里,有什么区别???

在这里插入图片描述
在Java中,类的属性可以直接定义在类的顶层,也可以在类的方法内部定义局部变量。这两者之间有一些关键的区别:

  1. 作用域:

    • 类的顶层属性(成员变量): 这些属性的作用域是整个类,可以被类中的所有方法访问。它们通常用于描述对象的状态或特征。
    • 方法内部的局部变量: 这些变量的作用域仅限于包含它们的方法。它们在方法执行时创建,方法执行完毕后就会销毁。局部变量通常用于存储临时数据或方法内的计算结果。
  2. 生命周期:

    • 类的顶层属性: 随着对象的创建而存在,随着对象的销毁而销毁。它们的生命周期与对象的生命周期相同。
    • 方法内部的局部变量: 在方法执行期间存在,一旦方法执行完毕,它们就会被销毁。它们的生命周期比成员变量短暂。
  3. 初始化:

    • 类的顶层属性: 如果不显式地初始化,它们将被赋予默认值(如数值类型为0,引用类型为null等)。
    • 方法内部的局部变量: 必须显式地初始化,否则编译器会报错。局部变量不会自动初始化为默认值。
  4. 访问修饰符:

    • 类的顶层属性: 可以使用访问修饰符控制其访问权限,例如privateprotectedpublic等。
    • 方法内部的局部变量: 不可使用访问修饰符,因为它们只在包含它们的方法内可见。

下面是一个简单的示例,演示了类的顶层属性和方法内部的局部变量:

public class ExampleClass {
    // 类的顶层属性(成员变量)
    private int memberVariable;

    // 类的方法
    public void exampleMethod() {
        // 方法内部的局部变量
        int localVar = 10;

        // 访问类的顶层属性
        this.memberVariable = 20;

        // 访问局部变量
        System.out.println("局部变量:" + localVar);
    }
}

总的来说,成员变量通常用于描述对象的状态,而局部变量通常用于方法内的临时计算。选择何种形式取决于变量的作用范围和生命周期。

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

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

相关文章

webshell之反射免杀

主要讲解反射在webshell中的利用&#xff0c;以及反射绕过杀软的利用与原理 原始反射马 免杀效果: 特征太明显里面还有java.lang.Runtime&#xff0c;getRuntime&#xff0c;exec这些敏感内容&#xff0c;由于与反射相关的参数都是字符串&#xff0c;由此我们能操作的空间就很…

接口01-Java

接口-Java 一、引入(快速入门案例)二、接口介绍1、概念2、语法 三、应用场景四、接口使用注意事项五、练习题1 一、引入(快速入门案例) usb插槽就是现实中的接口。 你可以把手机、相机、u盘都插在usb插槽上&#xff0c;而不用担心那个插槽是专门插哪个的&#xff0c;原因是做u…

2023年【危险化学品经营单位安全管理人员】考试总结及危险化学品经营单位安全管理人员模拟试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年【危险化学品经营单位安全管理人员】考试总结及危险化学品经营单位安全管理人员模拟试题&#xff0c;包含危险化学品经营单位安全管理人员考试总结答案和解析及危险化学品经营单位安全管理人员模拟试题练习。安…

.NET6实现破解Modbus poll点表配置文件

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,我们面对的不仅仅是技术还有人心,人心不可测,海水不可量,唯有技术,才是深沉黑夜中的一座闪烁的灯塔 !序言 Modbus 协议是工控领域常见…

jq+canvas:实现图片上传+裁剪+保存等功能

效果图 上传图片之前&#xff1a; 上传图片之后&#xff0c;点击放大/缩小后的效果&#xff1a; 裁剪之后的效果&#xff1a; 代码实现如下&#xff1a; 1.html部分 <input type"file" id"fileInput" accept"image/png, image/gif, image/j…

GDOUCTF2023-Reverse WP

文章目录 [GDOUCTF 2023]Check_Your_Luck[GDOUCTF 2023]Tea[GDOUCTF 2023]easy_pyc[GDOUCTF 2023]doublegame[GDOUCTF 2023]L&#xff01;s&#xff01;[GDOUCTF 2023]润&#xff01;附 [GDOUCTF 2023]Check_Your_Luck 根据 if 使用z3约束求解器。 EXP&#xff1a; from z3 i…

OkHttp的配置

一、拦截器 1.添加拦截器的作用&#xff1a; 每次在请求过程中就会回调一次intercept方法 2.拦截器的回调方法里我们可以做那些事情&#xff1a; 当前的请求还没有发给服务器&#xff0c;比如我们在与服务器通信的时候&#xff0c;一个应用中很多地方都会跟服务器发起通信。…

WGS84转CGCS2000操作步骤

1、使用一个转换软件实现不同椭球之间转换七参数的求取。打开坐标转换软件如下&#xff1a; 2、点击设置-地图投影&#xff0c; 如下&#xff1a; 3、设置需要投影到的坐标系&#xff0c;如下&#xff1a; 4、【选择目标坐标系】中选择CGCS2000&#xff0c;如下&#xff1a; 5、…

智能优化算法应用:基于正余弦算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于正余弦算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于正余弦算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.正余弦算法4.实验参数设定5.算法结果6.参考文献7.…

深入Rust的模式匹配与枚举类型

今天&#xff0c;我们将深入探讨Rust语言中的两个强大特性&#xff1a;模式匹配&#xff08;Pattern Matching&#xff09;和枚举类型&#xff08;Enums&#xff09;。这两个特性是Rust提供的核心工具之一&#xff0c;它们在处理多种类型的数据和复杂的逻辑控制中发挥着关键作用…

灰度发布专题---2、Dubbo灰度发布

通过上面描述&#xff0c;我们理解了什么是灰度发布&#xff0c;接下来我们基于Dubbo实现灰度发布。Dubbo的灰度发布常见的方式有版本控制灰度发布、路由灰度发布、基于Apollo实现灰度发布&#xff0c;我们把这每种灰度发布都实现一次。 在学习Dubbo灰度发布之前&#xff0c;我…

2019年11月7日 Go生态洞察:Go Modules v2及更高版本

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

vue3 setup语法糖,常用的几个:defineProps、defineEmits、defineExpose、

vue3和vue2组件之间传参的不同 <script setup> 是在单文件组件 (SFC) 中使用组合式 API 的编译时语法糖。 <script setup> 中的代码会在每次组件实例被创建的时候执行。 任何在 <script setup> 声明的顶层的绑定 (包括变量&#xff0c;函数声明&#xff0…

食材管家,轻松搞定!商户选择生鲜配送系统的原因

随着消费者对生鲜食品的需求不断增加&#xff0c;生鲜市场逐渐成为了电商领域中的热门行业。而生鲜配送系统&#xff0c;则是生鲜电商发展中不可或缺的一部分。本文将探讨商户选择生鲜配送系统的几个原因。 1. 提高效率 生鲜配送系统通过智能化的订单处理、路线规划和配送优化…

2023.11.27 关于 Mybatis 增删改操作

目录 引言 增加用户操作 删除用户操作 修改用户操作 阅读下述文章之间 建议点击下方链接先了解 MyBatis 的创建与使用 MyBatis 的创建与使用 建议点击下方链接先了解 单元测试 的创建与使用 Spring Boot 单元测试的创建与使用 引言 为了方便下文实现增、删、改操作我们先…

java多线程-扩展知识三:乐观锁与悲观锁

1、悲观锁 悲观锁有点像是一位比较悲观&#xff08;也可以说是未雨绸缪&#xff09;的人&#xff0c;总是会假设最坏的情况&#xff0c;避免出现问题。 悲观锁总是假设最坏的情况&#xff0c;认为共享资源每次被访问的时候就会出现问题(比如共享数据被修改)&#xff0c;所以每次…

Appium 2 和 Appium Inspector 环境部署

前言 自 2022 年 1 月 1 日起&#xff0c;Appium 核心团队不再维护 Appium 1.x。官方支持的平台驱动程序的所有最新版本均不兼容 Appium 1.x&#xff0c;需要 Appium 2 才能运行。 Appium 2是一个自动化移动应用程序的开源工具&#xff0c;它带来了以下重要改进&#xff1a;  …

SpringBootWeb案例_01

Web后端开发_04 SpringBootWeb案例_01 原型展示 成品展示 准备工作 需求&环境搭建 需求说明&#xff1a; 完成tlias智能学习辅助系统的部门管理&#xff0c;员工管理 环境搭建 准备数据库表&#xff08;dept、emp&#xff09;创建springboot工程&#xff0c;引入对应…

神经网络核心组件和流程梳理

文章目录 神经网络核心组件和流程梳理组件流程 神经网络核心组件和流程梳理 组件 层&#xff1a;神经网络的基本结构&#xff0c;将输入张量转换为输出张量。模型&#xff1a;由层构成的网络。损失函数&#xff1a;参数学习的目标函数&#xff0c;通过最小化损失函数来学习各…

HCIP-十一、BGP反射器和联盟

十一、BGP反射器和联盟 实验拓扑实验需求及解法1.配置各设备的接口 IP 地址。2.BGPAS 规划3.BGP 反射器4.BGP 联盟5.ebgp 邻居6.bgp 路由汇总 实验拓扑 实验需求及解法 本实验模拟 BGP 综合网络拓扑&#xff0c;完成以下需求&#xff1a; 1.配置各设备的接口 IP 地址。 所有…