代码随想录day20

news/2024/7/7 19:50:08

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

https://leetcode.cn/problems/minimum-absolute-difference-in-bst/
中序遍历找最小值。

class Solution {
    int min=Integer.MAX_VALUE;
    TreeNode prev;
    public int getMinimumDifference(TreeNode root) {
        if(root.left!=null&&getMinimumDifference(root.left)<min){
            min=getMinimumDifference(root.left);
        }
        if(prev!=null&&root.val-prev.val<min){
            min=root.val-prev.val;
        }
        prev=root;
        if(root.right!=null&&getMinimumDifference(root.right)<min){
            min=getMinimumDifference(root.right);
        }
        return min;
    }
}

501. 二叉搜索树中的众数

https://leetcode.cn/problems/find-mode-in-binary-search-tree/
中序遍历map记录指和出现次数,同时记录最大值和size,用例都通过了,但是超出时间限制,不知为何。

class Solution {
    HashMap<Integer,Integer> map=new HashMap<>();
    int max=0;
    int size;
    public int[] findMode(TreeNode root) {
        find(root);
        int[] res=new int[size];
        int i=0;
        for(Map.Entry<Integer, Integer> entry : map.entrySet()){
            if(entry.getValue()==max){
                res[i]=entry.getKey();
                i++;
            }
        }
        return res;
    }
    private void find(TreeNode root) {
        if(root==null) return;
        findMode(root.left);
        map.put(root.val,map.getOrDefault(root.val, 0) + 1);
        if(map.get(root.val)>max){
            max=map.get(root.val);
            size=0;
        }
        if(map.get(root.val)==max) size++;
        findMode(root.right);
    }
}

改成这样通过了,清楚无用map,但用时为2653ms,依然是一个庞大的数字。

class Solution {
    HashMap<Integer,Integer> map=new HashMap<>();
    int max=-1;
    int size;
    public int[] findMode(TreeNode root) {
        find(root);
        int[] res=new int[size];
        int i=0;
        for(Map.Entry<Integer, Integer> entry : map.entrySet()){
            if(entry.getValue()==max){
                res[i]=entry.getKey();
                i++;
            }
        }
        return res;
    }
    private void find(TreeNode root) {
        if(root==null) return;
        findMode(root.left);
        map.put(root.val,map.getOrDefault(root.val, 0) + 1);
        if(map.get(root.val)>max){
            max=map.get(root.val);
            map.clear();
            map.put(root.val,max);
            size=0;
        }
        if(map.get(root.val)==max) size++;
        findMode(root.right);
    }
}

不用map时间是21ms

class Solution {
    ArrayList<Integer> resList=new ArrayList<Integer>();
    int max=0;
    int size=0;
    TreeNode pre=null;
    public int[] findMode(TreeNode root) {
        find(root);
        int[] res=new int[resList.size()];
        int i=0;
        for(int k : resList){
            res[i]=k;
            i++;
        }
        return res;
    }
    private void find(TreeNode root) {
        if(root==null) return;
        findMode(root.left);
        if (pre == null || root.val != pre.val) {
            size = 1;
        } else {
            size++;
        }
        if(size>max){
            max=size;
            resList.clear();
            resList.add(root.val);
        }else if(size==max){
            resList.add(root.val);
        }
        pre=root;
        findMode(root.right);
    }
}

236. 二叉树的最近公共祖先

https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/
如果找到是某根节点,另一个在根节点的子树中则返回该根节点,另一种情况是分属于两个子树,则根节点为遍历到此的根节点。但是没有头绪了、。应该用后序遍历。

class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if (root == q || root == p || root == null) return root;
        if(p.left==q||p.right==q) return p;
        if(q.left==p||q.right==p) return q;
        TreeNode left = lowestCommonAncestor(root.left, p, q);
        TreeNode right = lowestCommonAncestor(root.right, p, q);
        if(left == null && right == null) {
            return null;
        }else if(left == null && right != null) {
            return right;
        }else if(left != null && right == null) {
            return left;
        }else { // 若找到两个节点
            return root;
        }
    }
}

http://lihuaxi.xjx100.cn/news/796586.html

相关文章

【算法】程序猿必备算法

文章目录快速排序算法堆排序算法归并排序二分查找算法BFPRT(线性查找算法)DFS&#xff08;深度优先搜索&#xff09;BFS(广度优先搜索)Dijkstra算法动态规划算法朴素贝叶斯分类算法Floyd Warshall算法贝尔曼福特算法贪心算法拓扑排序最小生成树分治算法KMP暴力匹配更多来源快速…

element - - - - - Form表单的resetFields()方法没有生效?

万事如伊 大吉大利 Form表单的resetFields方法没有生效?1. 场景描述2. 问题分析3. 解决办法关于element组件&#xff0c;相信各位同学都不陌生。其各个组件不可谓不好用&#xff0c;能够快速的帮助开发人员进行排版布局&实现效果。 但是总会遇到一些不可避免的坑。 1. 场…

微信小程序+前端+天行数据垃圾图像识别接口API

文章目录 前言 步骤 1. 去到天行数据官网注册账号&#xff0c;去到接口的介绍网站 2. 去测试网站&#xff0c;先看看请求的格式 3. 小程序端我采用的是把网站上的url链接的网络图片转成base64编码后的形式作为传入参数&#xff0c;这里需要有点基础&#xff0c;因为只给上了…

毫米波雷达「增量」升级

随着智能驾驶进入高阶周期&#xff0c;基于视觉感知的冗余策略&#xff0c;也在走出两条不同路径&#xff1a;一是&#xff0c;拿掉传统角雷达&#xff0c;并增加激光雷达来作为补充&#xff0c;而去年补盲激光雷达的加入&#xff0c;让竞争也更加激烈&#xff1b;二是&#xf…

狂神说Springboot笔记

SpringBoot系列笔记:狂神说SpringBoot01:Hello,World!狂神说SpringBoot02:运行原理初探狂神说SpringBoot03:yaml配置注入狂神说SpringBoot04:JSR303数据校验及多环境切换狂神说SpringBoot05:自动配置原理狂神说SpringBoot06:自定义starter狂神说SpringBoot07:整合JDBC…

1145.binary-tree-coloring-game 二叉树着色游戏

问题描述 1145.二叉树着色游戏 解题思路 贪心策略:对二号玩家来说,想要取胜,选择染色节点只有三种可能:选择x的父节点,则通过深度优先搜索可以求得红色节点数,蓝色节点数为\(n\)减去红色节点数 选择x的左子节点,则通过dfs可以求得蓝色节点数,红色节点数为\(n\)减去蓝色…

基于Java+Spring+Html的图书借阅管理系统详细设计和实现

博主介绍&#xff1a;✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

文档存储Elasticsearch系列--1 ES介绍

前言&#xff1a;Elasticsearch 也是使用 Java 编写的&#xff0c;它的内部使用 Lucene 做索引与搜索&#xff0c;支持结构化文档数据的分布式存储&#xff0c;并提供准实时的查询&#xff0c;全文检索&#xff0c;数据聚合&#xff1b; 1 为什么要使用ES: ES 本身存在哪些特性…