当前位置: 首页 > news >正文

菜鸟刷题Day7

⭐作者:别动我的饭
⭐专栏:菜鸟刷题
⭐标语:悟已往之不谏,知来者之可追
在这里插入图片描述

一.整理字符串:1544. 整理字符串 - 力扣(LeetCode)

描述

给你一个由大小写英文字母组成的字符串 s 。

一个整理好的字符串中,两个相邻字符 s[i] 和 s[i+1],其中 0<= i <= s.length-2 ,要满足如下条件:

若 s[i] 是小写字符,则 s[i+1] 不可以是相同的大写字符。
若 s[i] 是大写字符,则 s[i+1] 不可以是相同的小写字符。

请你将字符串整理好,每次你都可以从字符串中选出满足上述条件的 两个相邻 字符并删除,直到字符串整理好为止。

请返回整理好的 字符串 。题目保证在给出的约束条件下,测试样例对应的答案是唯一的。

注意:空字符串也属于整理好的字符串,尽管其中没有任何字符。

示例 1:

输入:s = "leEeetcode"
输出:"leetcode"
解释:无论你第一次选的是 i = 1 还是 i = 2,都会使 "leEeetcode" 缩减为 "leetcode" 。

解题思路

这个题目描述很长给人一种压迫感,但是这个题目并不难。对于删除字符,我们至少有两种办法一种是直接挪动数据(复杂度太高,不考虑),还有就是新开一个数组,将有效数据放入新的数组中(用空间换时间)。

这里采用栈的思想,新建一个数组通过下标控制来达到模拟实现栈的目标。用栈的话就会很简单,直接将元素读取到栈中,如果栈顶的两个相邻元素是互为大小写,那么直接将栈顶的两个元素删除就行。在数组的表现形式上就是不断尾插尾删

char * makeGood(char * s)
{int len=strlen(s);char*tmp=(char*)malloc(sizeof(char)*(len+1));int top=0;//栈顶位置for(int i=0;i<len;i++){//将所有元素入栈,如果栈顶的两个元素互为大小写,就将两个元素都删除tmp[top++]=s[i];if(top>=2&&(tmp[top-1]==tmp[top-2]-32||tmp[top-1]==tmp[top-2]+32)){//因为top是后置++,新入栈的两个元素一定是top-1和top-2top-=2;//改变top位置就实现删除,这个在数组中常用的(逻辑覆盖删除)}}//字符串的结束标志是'\0',前面的循环到'\0'前就结束了,所以还需要我们自行补充tmp[top]='\0';return tmp;
}

二.开幕式火焰:LCP 44. 开幕式焰火 - 力扣(LeetCode)

描述

「力扣挑战赛」开幕式开始了,空中绽放了一颗二叉树形的巨型焰火。
给定一棵二叉树 root 代表焰火,节点值表示巨型焰火这一位置的颜色种类。请帮小扣计算巨型焰火有多少种不同的颜色。

示例 1:

输入:root = [1,3,2,1,null,2]

输出:3

解释:焰火中有 3 个不同的颜色,值分别为 1、2、3

提示:

  • 1 <= 节点个数 <= 1000
  • 1 <= Node.val <= 1000

解题思路

根据示例可以看到,如果树中出现值相同的节点也只算一次,也就是说要统计节点val不相同的个数(null不算),有没有想起一个很熟悉的解法,这个解法在刚开始的时候就已经提到过了,就是基数排序。

其实就是建立一个数组,然后将节点的值作为下标,然后给这个下标位置的元素+1(要知道如果不对变量初始化,则变量中的值是随机值,所以一定要初始化)用memset对数组初始化后,调用前序遍历,最后再对数组遍历统计数组中不为零的个数。

int hash[1001];//因为前序遍历中也要用到这个数组,所以写成全局变量void Perfind(struct TreeNode*root)
{if(root){hash[root->val]+=1;//是不是很眼熟哈哈Perfind(root->left);Perfind(root->right);} }int numColor(struct TreeNode* root)
{memset(hash,0,sizeof(hash));Perfind(root);int count=0;//暴力遍历for(int i=0;i<1001;i++){if(hash[i]!=0)count++;}return count;
}  

你猜我为什么不直接在声明的时候定义写成:int hash[1001]={0},当然是因为跑不过所以才用memset。


三.从根到叶的二进制数之和:1022. 从根到叶的二进制数之和 - 力扣(LeetCode)

描述

给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。

例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是 13 。
对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。

返回这些数字之和。题目数据保证答案是一个 32 位 整数。

示例1:

在这里插入图片描述

输入:root = [1,0,1,0,1,0,1]
输出:22
解释:(100) + (101) + (110) + (111) = 4 + 5 + 6 + 7 = 22


解题思路

关于二进制求和的题目在前面也有做过,当时给了两种方法,但是第一种在这里不太好用,这里建议使用左移操作符,求和不是问题。

根据题目给的示例可以发现,是先走完左子树再走的右子树,也就是说遍历顺序是左子树——右子树——根(后序遍历),所以只要递归使用后续遍历即可,遍历到叶子节点时就开始计算累加和。当然如果这是一个空树,那我们直接返回空就行。

void AddVal(struct TreeNode* root,int val,int *sum)
{if(root==NULL)return NULL;//树不为空树,直接开始计算本次遍历获取到的二进制数val=(val<<1)+root->val;//到达叶子节点就累加计算整棵树的结果if(root->left==NULL&&root->right==NULL)*sum+=val;//递归遍历AddVal(root->left,val,sum);AddVal(root->right,val,sum);}int sumRootToLeaf(struct TreeNode* root)
{int sum=0;AddVal(root,0,&sum);return sum;//最后sum就是结果
}

四.二叉树的坡度:563. 二叉树的坡度 - 力扣(LeetCode)

描述

给你一个二叉树的根节点 root ,计算并返回 整个树 的坡度 。

一个树的 节点的坡度 定义即为,该节点左子树的节点之和和右子树节点之和的 差的绝对值 。如果没有左子树的话,左子树的节点之和为0 ;没有右子树的话也是一样。空结点的坡度是 0 。

整个树 的坡度就是其所有节点的坡度之和。

示例1:

在这里插入图片描述

输入:root = [1,2,3]
输出:1
解释:
节点 2 的坡度:|0-0| = 0(没有子节点)
节点 3 的坡度:|0-0| = 0(没有子节点)
节点 1 的坡度:|2-3| = 1(左子树就是左子节点,所以和是 2 ;右子树就是右子节点,所以和是 3 )
坡度总和:0 + 0 + 1 = 1

解题思路

这一题其实是一个变种的二叉树遍历,二叉树的坡度等于左树的坡度加右数的坡度加根的坡度,最后根节点的坡度是根所有子树和之间的坡度。可以采取和上题类似的办法,从叶子节点开始计算坡度和子树的和,并且累加每个子树坡度。最后根节点的坡度用两个子树和相减.

int dfs(struct TreeNode*root,int *sum)
{if(root==NULL)return 0;int left=dfs(root->left,sum);int right=dfs(root->right,sum);*sum+=abs(left-right);//拿到两个节点之间差的绝对值return left+right+root->val;//题目中说是该节点的左子树之和和右子树之和的差,要知道该节点的左子树又有左子树和右子树,所以必须要将左右子树节点记下来
}int findTilt(struct TreeNode* root)
{int sum=0;dfs(root,&sum);return sum;
}

该说不说,递归有时候可读性是真不高,也很难整(菜鸡流泪again)。

人们总是高估短期努力带来的提升,而忽略长期坚持带来的改变。今天是第七天了,你还有坚持吗?

相关文章:

菜鸟刷题Day7

⭐作者&#xff1a;别动我的饭 ⭐专栏&#xff1a;菜鸟刷题 ⭐标语&#xff1a;悟已往之不谏&#xff0c;知来者之可追 一.整理字符串&#xff1a;1544. 整理字符串 - 力扣&#xff08;LeetCode&#xff09; 描述 给你一个由大小写英文字母组成的字符串 s 。 一个整理好的字…...

蓝桥杯刷题第二十三天

第一题&#xff1a;长草题目描述小明有一块空地&#xff0c;他将这块空地划分为 n 行m 列的小块&#xff0c;每行和每列的长度都为 1。小明选了其中的一些小块空地&#xff0c;种上了草&#xff0c;其他小块仍然保持是空地。这些草长得很快&#xff0c;每个月&#xff0c;草都会…...

进阶指针(3)——指针与数组笔试题的解析

在讲解之前我们先回顾一下&#xff0c;以下将要涉及的重要知识点&#xff1a; 1、数组名是什么&#xff1f; ①sizeof(数组名)&#xff0c;这里的数组名表示整个数组&#xff0c;计算的是整个数组的大小&#xff0c;单位是字节&#xff1b; ②&数组名&#xff0c;这里的数…...

树与二叉树的存储与遍历

文章目录一、树概念二、二叉树三、二叉树的存储与遍历一、树概念 如前面的顺序表&#xff0c;链表&#xff0c;栈和队列都是线性的数据结构&#xff0c;树是非线性的结构。树可以有n个结点&#xff0c;n>0,当n0是就表示树为空 n>0,代表树不为空&#xff0c;不为空的树&am…...

28-队列练习-LeetCode622设计循环队列

题目 设计你的循环队列实现。 循环队列是一种线性数据结构&#xff0c;其操作表现基于 FIFO&#xff08;先进先出&#xff09;原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通…...

你值得拥有——流星雨下的告白(Python实现)

目录1 前言2 霍金说移民外太空3 浪漫的流星雨展示 4 Python代码 1 前言我们先给个小故事&#xff0c;提一下大家兴趣&#xff1b;然后我给出论据&#xff0c;得出结论。最后再浪漫的流星雨表白代码奉上&#xff0c;还有我自创的一首诗。开始啦&#xff1a;2 霍金说移民外太空霍…...

【5G RRC】NR测量事件介绍

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…...

PMP项管2023年5月的备考准备攻略!

2023年共有4次PMP考试&#xff0c;分别是3月、5月、8月、11月&#xff0c;由于3月份考试不开放新报名&#xff0c;所以第一次备考PMP的同学可以选择参加5月份考试。那么&#xff0c;现在备考5月份PMP考试还来得及吗&#xff1f; 现在开始备考5月PMP考试&#xff0c;时间是非常…...

Linux进程概念—环境变量

Linux进程概念—环境变量1.孤儿进程2.环境变量2.1常见环境变量2.2查看环境变量方法2.3在环境变量中添加2.4和环境变量相关的命令2.5环境变量的组织方式2.6命令行参数&#x1f31f;&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f;&#x1f31f; &#x1f68…...

用JS+CSS打造你自己的弹幕王国,让网页动起来!

文章目录前言主要内容实现方法DOM方法显现效果代码CANVAS方法显现效果代码总结更多宝藏前言 &#x1f60e;&#x1f973;&#x1f60e;&#x1f920;&#x1f62e;&#x1f916;&#x1f648;&#x1f4ad;&#x1f373;&#x1f371; 用JSCSS打造你自己的弹幕王国&#xff0c…...

C++ LinuxWebServer 2万7千字的面经长文(上)

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的在读研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 前言 Linux Web Server项目虽然是现在C求职者的人手一个的项目&#xff0c;但是想要吃透这个项目&#xff…...

vue3 解决各场景 loading过度 ,避免白屏尴尬!

Ⅰ、前言 当我们每次打卡页面&#xff0c;切换路由&#xff0c;甚至于异步组件&#xff0c;都会有一个等待的时间 &#xff1b;为了不白屏&#xff0c;提高用户体验&#xff0c;添加一个 loading 过度动画是 非常 常见的 &#xff1b;那么这几种场景我们应该把 loading 加在哪…...

基于sringboot和小程序实现高校食堂移动预约点餐系统演示【源码】

基于sringboot实现高校食堂移动预约点餐系统演示开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&am…...

开源操作系统与Windows大比拼!

科技网站ZDNet近日撰文称&#xff0c;在一个用户为王的时代&#xff0c;操作系统们为了获得青睐都放下了身段&#xff0c;采用免费策略&#xff0c;但其中却有一个例外——Windows 10。这样的一反常理让许多人不看好Windows的未来&#xff0c;难道这个我们最熟悉的朋友真的会成…...

RTL8201 以太网PHY芯片 调试记录

一、概述 为了尽量给甲方降低成本&#xff0c;决定使用较低成本的PHY芯片RTL8201F-VB-CG芯片。移植官网的以太网demo程序&#xff0c;git上下载了一份很好看的rtl8201F的驱动程序&#xff0c;用来替换官方demo的lan8742程序。并没有直接通&#xff0c;于是开始了调试之路。 二…...

Java中Static关键字的五种用法详解

Static的五种用法大致如下&#xff1a; 修饰成员变量&#xff0c;使其成为类变量&#xff0c;也叫静态变量修饰成员方法&#xff0c;使其成为类方法修饰内部类&#xff0c;使其成为静态内部类静态代码块静态导包 直接一点&#xff0c;static关键字就是把属性和方法变为类相关&…...

WebSocket 测试工具

一、WebSocket 简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议。 WebSocket使得客户端和服务器之间的数据交换变得更加简单&#xff0c;允许服务端主动向客户端推送数据。在WebSocket API中&#xff0c;浏览器和服务器只需要完成一次握手&#xff0c;两者之间就直…...

低代码开发的未来~

IT 团队依靠笨重的软件开发流程和劳动密集型的手工编码来构建有形、可靠和现代应用程序的时代即将结束。随着新自动化技术的兴起、渴望创新的客户和最终用户的期望和需求迅速提高以及开发人员的短缺&#xff0c;软件行业被迫寻求替代方法&#xff0c;不仅提供服务和产品&#x…...

蓝桥杯真题——模拟灌溉系统

尽量每天都自己写一遍模板&#xff0c;记住模板就好写了 以下内容直接在模板内进行 基本任务&#xff1a;要求“模拟智能灌溉系统”能够实现土壤湿度测量、土壤湿度和时间显示、湿度阈值设 定及存储等基本功能。通过电位器 Rb2 输出电压信号&#xff0c;模拟湿度传感器输出信号…...

【数据结构】双向链表实现

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 一、什么是双向链表 二、双向链表的实现 一、什么是双向链表 双向链表也叫双链表&#xff0c;是链表的一种&#xff0c;它的每个数据节点中都有两个指针&#xff0c;分别指向直接后…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...