ArrayList比较问题要用equals
在二叉树中找到两个节点的最近公共祖先
https://www.nowcoder.com/practice/e0cc33a83afe4530bcec46eba3325116
Java 中的对象比较:== 与 equals
在 Java 中,比较对象时常用的两种方法是 == 和 equals。它们有不同的语义和用途,理解它们的区别对于编写正确的代码至关重要。
== 运算符
- 用途:比较两个对象的引用是否相同,即它们是否指向同一个内存地址。
- 基本数据类型:对于基本数据类型(如
int、char、boolean等),==比较的是值是否相等。 - 对象:对于对象(如
String、Integer等),==比较的是对象的引用是否相同。
equals 方法
- 用途:比较两个对象的内容是否相等。
- 重写:对于大多数对象类型,
equals方法需要被重写以提供有意义的内容比较。 - 字符串:对于
String类型,equals方法比较的是字符串的内容是否相等。
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @param o1 int整型
* @param o2 int整型
* @return int整型
*/
public boolean flag = false;
public void dfs(TreeNode root, ArrayList<Integer> path, int o){
if(flag || root == null)
return;
path.add(root.val);
if(root.val == o){
flag = true;
return;
}
dfs(root.left, path, o);
dfs(root.right, path, o);
if(flag)
return;
path.remove(path.size() - 1);
}
public int lowestCommonAncestor (TreeNode root, int o1, int o2) {
// write code here
ArrayList<Integer> p1 = new ArrayList<>();
ArrayList<Integer> p2 = new ArrayList<>();
dfs(root, p1, o1);
flag = false;
dfs(root, p2, o2);
int res = 0;
for(int i = 0; i < Math.min(p1.size(), p2.size()); i++){
if(p1.get(i).equals(p2.get(i)))
res = p1.get(i);
}
return res;
}
}
查看4道真题和解析