力扣爆刷第160天之TOP100五连刷66-70(回溯、旋转图像、技巧题)

力扣爆刷第160天之TOP100五连刷66-70(回溯、旋转图像、技巧题)

文章目录

      • 力扣爆刷第160天之TOP100五连刷66-70(回溯、旋转图像、技巧题)
      • 一、110. 平衡二叉树
      • 二、39. 组合总和
      • 三、543. 二叉树的直径
      • 四、470. 用 Rand7() 实现 Rand10()
      • 五、48. 旋转图像

一、110. 平衡二叉树

题目链接:https://leetcode.cn/problems/balanced-binary-tree/description/
思路:判断二叉树是否是平衡二叉树,只需要判断每一个节点的左右子树高度差是否大于1,既然需要每个节点左右子树的信息,自然得是后序遍历才能拿到,所以采用后序遍历,以返回左右子树的最大高度进行判断即可。

class Solution {
    boolean flag = true;
    public boolean isBalanced(TreeNode root) {
        isTrue(root);
        return flag;
    }

    int isTrue(TreeNode root) {
        if(root == null || !flag) return 0;
        int left = isTrue(root.left);
        int right = isTrue(root.right);
        if(Math.abs(left - right) > 1) flag = false;
        return Math.max(left, right) + 1;
    }
}

二、39. 组合总和

题目链接:https://leetcode.cn/problems/combination-sum/description/
思路:对于一个无重复元素的数组,但是每个元素可以使用的次数是不限制的,求组合成一个目标数的,所有组合方式。组合和排序是典型的回溯题目,组合因为不讲究前后顺序,所以需要指定起始位置,才不会出现重复的组合,又因为单个元素可以重复使用,所以起始位置是当前元素即可,如果不可复用,则是下一个位置。其他的都一样,注意排列早停。

class Solution {
    List<List<Integer>> result = new ArrayList<>();
    List<Integer> list = new ArrayList<>();
    int sum = 0;
    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        Arrays.sort(candidates);
        backTracking(candidates, target, 0);
        return result;
    }
    
    void backTracking(int[] nums, int target, int index) {
        if(sum == target) {
            result.add(new ArrayList(list));
            return;
        }
        for(int i = index; i < nums.length && nums[i] + sum <= target; i++) {
            sum += nums[i];
            list.add(nums[i]);
            backTracking(nums, target, i);
            sum -= nums[i];
            list.remove(list.size()-1);
        }
    }
    
}

三、543. 二叉树的直径

题目链接:https://leetcode.cn/problems/diameter-of-binary-tree/description/
思路:求二叉树的直径,说的是可能过根节点,也可能不过,其实最大直径求的就是每一个节点的左右子树高度和,那么就简单了,就是求树的高度,然后加和左右子树高度,然后记录即可。

class Solution {
    int max = 0;
    public int diameterOfBinaryTree(TreeNode root) {
        traverse(root);
        return max;
    }
    int traverse(TreeNode root) {
        if(root == null) return 0;
        int left = traverse(root.left);
        int right = traverse(root.right);
        max = Math.max(max, left + right);
        return Math.max(left, right) + 1;
    }
}

四、470. 用 Rand7() 实现 Rand10()

题目链接:https://leetcode.cn/problems/implement-rand10-using-rand7/description/
思路:本题让用产生1-7的随机数函数,构造产生1-10随机数的函数,其实很构造,只需要1/2 * 1/5即可。
构造1/2:要最求尽可能的是1/2,一般来说,范围够大就行,用while循环产生数,只要大于6就一直循环,那么退出while循环时,出来的数只能是1-6,3个奇数,3个偶数,那么判断是奇数还是偶数就构造了1/2.
构造1/5:只需要while生成数,大于5的不要,产生的就是1-5,那么就可以根据奇数还是偶数来决定是否给+5。
由此即可构造Rand10()。

/**
 * The rand7() API is already defined in the parent class SolBase.
 * public int rand7();
 * @return a random integer in the range 1 to 7
 */
class Solution extends SolBase {
    public int rand10() {
        int first, second;
        while((first = rand7()) > 6) ;
        while((second = rand7()) > 5) ;
        return (first & 1) == 1 ? second : 5 + second;
    }
}

五、48. 旋转图像

题目链接:https://leetcode.cn/problems/rotate-image/description/
思路:90度旋转矩阵,也是很经典的题目,其实只需要沿着左上角与右下角的独角线先对称交换一下,在沿着竖直中线左右交换一下即可完成向右90度旋转。
在这里插入图片描述

class Solution {
    public void rotate(int[][] matrix) {
        int n = matrix.length;
        
        for(int i = 0; i < n; i++) {
            for(int j = i; j < n; j++) {
                int t = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i] = t;
            }
        }
        
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < n/2; j++) {
                int t = matrix[i][j];
                matrix[i][j] = matrix[i][n-j-1];
                matrix[i][n-j-1] = t;
            }
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

win系统提示VCRUNTIME140_1.dll丢失或找不到的8个处理方法

在使用电脑过程中经常会遇到各种各样的问题&#xff0c;比如vcruntime140_1.dll丢失或找不到vcruntime140_1.dll无法继续执行代码就是其中的一个常见问题!那么遇到vcruntime140_1.dll丢失问题要怎么处理&#xff1f;vcruntime140_1.dll是什么&#xff1f;下面我给大家详细介绍v…

谷粒商城学习笔记-16-人人开源搭建后台管理系统

文章目录 一&#xff0c;克隆前/后端代码1&#xff0c;克隆前端工程renren-fast-value2&#xff0c;克隆后端工程renren-fast 二&#xff0c;集成后台管理系统的后端代码三&#xff0c;启动后台管理系统四&#xff0c;前端系统的安装和运行1&#xff0c;下载安装VSCode2&#x…

Crossformer_Transformer

文章目录 摘要1 引言2 相关工作多变量时间序列预测基于Transformer的MTS预测视觉Transformers 3 方法详细解释 3.1 维度-分段-方式嵌入3.2 两阶段注意力层跨时间阶段跨维度阶段 3.3 分层编码器-解码器编码器解码器 摘要 最近&#xff0c;许多深度模型被提用于多变量时间序列&a…

Pyserial设置缓冲区大小失败

文章目录 问题描述原因分析解决方案 问题描述 使用set_buffer_size()设置缓冲区大小后&#xff0c;buffer size仍为默认的4096 import time import serial ser serial.Serial(baudrate9600, timeout0.5) ser.port COM1 ser.set_buffer_size(rx_size8192) ser.open() while …

无线传感器网络(物联网通信技术)期末考试2024年真题

目录 WSN期末复习资料 第一章&#xff1a;概述 第二章MAC协议 第三章路由协议 第四章时间同步技术 第五章定位技术 第六章安全技术 第七章拓扑控制 补充TPSN、HRTS公式推导 2024年期末考试考点 一、简述 二、考试真题回忆 WSN期末复习资料 第一章&#xff1a;概述 …

基于SpringBoot的校园台球厅人员与设备管理系统

本系统是要设计一个校园台球厅人员与设备管理系统&#xff0c;这个系统能够满足校园台球厅人员与设备的管理及用户的校园台球厅人员与设备管理功能。系统的主要功能包括首页、个人中心、用户管理、会员账号管理、会员充值管理、球桌信息管理、会员预约管理、普通预约管理、留言…

15集终于编译成功了-了个球!编译TFLite Micro语音识别工程-《MCU嵌入式AI开发笔记》

15集终于编译成功了-个球&#xff01;编译TFLite Micro语音识别工程-《MCU嵌入式AI开发笔记》 还是参考这个官方文档&#xff1a; https://codelabs.developers.google.cn/codelabs/sparkfun-tensorflow#2 全是干货&#xff01; 这里面提到的这个Micro工程已经移开了&#xff1…

第一节 网络安全概述

一.网络空间安全 网络空间&#xff1a;一个由信息基础设施组成相互依赖的网络。 ---- 海陆空天&#xff08;大海、陆 地、天空、航天&#xff09; 通信保密阶段 ---- 计算机安全 ----- 信息系统安全 ----- 网络空间安全 计算机安全&#xff1a;开始秉持着“严于律己&#x…

数据结构速成--图

由于是速成专题&#xff0c;因此内容不会十分全面&#xff0c;只会涵盖考试重点&#xff0c;各学校课程要求不同 &#xff0c;大家可以按照考纲复习&#xff0c;不全面的内容&#xff0c;可以看一下小编主页数据结构初阶的内容&#xff0c;找到对应专题详细学习一下。 目录 …

设计模式之状态机模式

一、状态机模式介绍 状态机模式&#xff08;State Machine Pattern&#xff09;是一种用于描述对象行为的软件设计模式&#xff0c;属于行为型设计模式。在状态机模式中&#xff0c;对象的行为取决于其内部状态&#xff0c;并且在不同的状态下&#xff0c;对象可能会有不同的行…

增强安全防护,解读智慧校园系统的登录日志功能

在构建智慧校园系统时&#xff0c;登录日志功能扮演着不可或缺的角色&#xff0c;它不仅是系统安全的守护者&#xff0c;也是提升管理效率和确保合规性的有力工具。这一机制详细记录每次登录尝试的方方面面&#xff0c;涵盖了时间戳、用户身份、登录来源的IP地址乃至使用的设备…

第2集《修习止观坐禅法要》

请打开补充讲表第一面&#xff0c;附表一、念佛摄心方便法。 我们前面讲到修止&#xff0c;就是善取所缘境的相貌&#xff0c;然后心于所缘&#xff0c;专一安住&#xff1b;心于所缘&#xff0c;相续安住&#xff1b;达到心一境性的目的。 站在修学净土的角度&#xff0c;他…

Ubuntu 20.04下多版本CUDA的安装与切换 超详细教程

目录 前言一、安装 CUDA1.找到所需版本对应命令2.下载 .run 文件3.安装 CUDA4.配置环境变量4.1 写入环境变量4.2 软连接 5.验证安装 二、安装 cudnn1.下载 cudnn2.解压文件3.替换文件4.验证安装 三、切换 CUDA 版本1.切换版本2.检查版本 前言 当我们复现代码时&#xff0c;总会…

如何监控和分析 PostgreSQL 中的查询执行计划?

文章目录 一、为什么监控和分析查询执行计划很重要二、PostgreSQL 中用于获取查询执行计划的方法三、理解查询执行计划的关键元素四、通过示例分析查询执行计划五、优化查询执行计划的常见策略六、使用工具辅助分析七、结合实际案例的详细分析八、总结 在 PostgreSQL 数据库中&…

STM32基础篇:引脚 × 复用 × 重映射

特殊引脚与普通引脚 特殊引脚 特殊功能引脚&#xff1a;"迫于生活压力"被特化的引脚&#xff0c;即为了满足芯片运行的基本条件。 以STM32F103C8T6型号为例&#xff0c;其特殊功能引脚&#xff08;11个&#xff09;(VddVss)*3多组供电接口VDDAVSSA(A表示Analog&…

Spring IOC基于XML和注解管理Bean

IoC 是 Inversion of Control 的简写&#xff0c;译为“ 控制反转 ”&#xff0c;它不是一门技术&#xff0c;而是一种设计思想&#xff0c;是一个重要的面向对象编程法则&#xff0c;能够指导我们如何设计出 松耦合、更优良的程序。 Spring 通过 IoC 容器来管理所有 Java 对象…

前端使用Threejs加载机械臂并控制机械臂跳舞

1. 前言 在我的第一篇博客中,大致讲解了如何使用threejs导入机械臂模型,以及如何让机械臂模型动起来的案例,可以看一下之前的博客前端使用Threejs控制机械臂模型运动 本篇博客主要讲解的是在原来的基础上添加GSAP动画库的应用,可以通过动画,来让机械臂进行指定轨迹位姿的运动…

Java 使用sql查询mongodb

在现代应用开发中&#xff0c;关系型数据库和NoSQL数据库各有千秋。MongoDB作为一种流行的NoSQL数据库&#xff0c;以其灵活的文档模型和强大的扩展能力&#xff0c;受到广泛欢迎。然而&#xff0c;有时开发者可能更熟悉SQL查询语法&#xff0c;或者需要在现有系统中复用SQL查询…

STM32——Modbus协议

一、Modbus协议简介&#xff1a; 1.modbus介绍&#xff1a; Modbus是一种串行通信协议&#xff0c;是Modicon公司&#xff08;现在的施耐德电气 Schneider Electric&#xff09;于1979年为使用可编程逻辑控制器&#xff08;PLC&#xff09;通信而发表。Modbus已经成为工业领域…

代码随想录训练第十一天|二叉树基础理论、二叉树递归遍历、二叉树迭代遍历、二叉树统一迭代法、LeetCode102.二叉树层序遍历

文章目录 二叉树理论基础二叉树种类满二叉树完全二叉树二叉搜索树平衡二叉搜索树 二叉树存储方式二叉树遍历方式二叉树的定义总结 二叉树的递归遍历思路前序遍历后序遍历中序遍历 二叉树的迭代遍历思路前序遍历&#xff08;迭代法&#xff09;中序遍历&#xff08;迭代法&#…