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

【LeetCode】1609. 奇偶树、1122. 数组的相对排序

 作者:小卢 

专栏:《Leetcode》

喜欢的话:世间因为少年的挺身而出,而更加瑰丽。                                  ——《人民日报》


 1609. 奇偶树

1609. 奇偶树 

题目描述:

如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 :

二叉树根节点所在层下标为 0 ,根的子节点所在层下标为 1 ,根的孙节点所在层下标为 2 ,依此类推。
偶数下标 层上的所有节点的值都是 奇 整数,从左到右按顺序 严格递增
奇数下标 层上的所有节点的值都是 偶 整数,从左到右按顺序 严格递减
给你二叉树的根节点,如果二叉树为 奇偶树 ,则返回 true ,否则返回 false 。

示例:

思路:

奇偶树:就当层数level为奇数,节点递减,当层数level为偶数,节点递增

 很明显本题需要用到层序遍历。

判断一棵二叉树是否为奇偶树,需要考虑两个条件,一是节点值的奇偶性,二是节点值的单调性,这两个条件都由层下标的奇偶性决定。因此,需要维护搜索到的层下标,以及对于每一层搜索都需要维护上一个节点值。

如果当前层下标是偶数,则要求当前层的所有节点的值都是奇数,且节点值从左到右严格递增。如果遇到节点值是偶数,或者当前节点值小于等于上一个节点值,则二叉树一定不是奇偶树。

如果当前层下标是奇数,则要求当前层的所有节点的值都是偶数,且节点值从左到右严格递减。如果遇到节点值是奇数,或者当前节点值大于等于上一个节点值,则二叉树一定不是奇偶树。

如果二叉树的所有节点都满足奇偶树的条件,则二叉树是奇偶树。

更详细的可以看看注释,我写很详细!!!

代码:

bool isEvenOddTree(struct TreeNode* root) {//Queue为队列//level为层数//head为二叉树的遍历位置//tail为队列的遍历位置struct TreeNode* Queue[100010];int level = 0;int head = 0;int tail = 0;Queue[head++] = root;while (tail < head)//当队列的位置tail大于二叉树的位置head遍历完成{//front为每次出队列的元素//size为队列的有效长度int size = head - tail;//prev为上一个节点的val//INT_MAX为int类型的最大值,INT_MIN为int类型的最小值//奇偶树:当level为奇数,节点是递减的,所以第一个节点要大于第二个节点//而在层序遍历中,最左边的节点一定是小于INT_MAX//同理可得,当leve为偶数,最左边的节点大于INT_MINint prev = level % 2 == 0 ? INT_MIN : INT_MAX;for (int i = 0; i < size; i++){struct TreeNode* front = Queue[tail++];if (level % 2 == (front->val) % 2)//level为奇数,节点为偶数,level为偶数,节点为奇数return false;if ((level % 2 == 0 && prev >= front->val) || (level % 2 == 1 && prev <= front->val))return false;//当level为奇数,节点是递减的,当level为偶数,节点是递增的prev = front->val;if (front->left)Queue[head++] = front->left;if (front->right)Queue[head++] = front->right;}level++;}return true;
}//LeetCode1609

1122. 数组的相对排序

1122. 数组的相对排序

题目描述:

给你两个数组,arr1 和 arr2,arr2 中的元素各不相同,arr2 中的每个元素都出现在 arr1 中。

对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。

示例:

 代码:

/*** Note: The returned array must be malloced, assume caller calls free().*/
int* relativeSortArray(int* arr1, int arr1Size, int* arr2, int arr2Size, int* returnSize) {int upper = 0;for (int i = 0; i < arr1Size; i++) {upper = fmax(upper, arr1[i]);}int frequency[upper + 1];memset(frequency, 0, sizeof(frequency));for (int i = 0; i < arr1Size; i++) {frequency[arr1[i]]++;}int* ans = malloc(sizeof(int) * arr1Size);*returnSize = 0;for (int i = 0; i < arr2Size; i++) {int x = arr2[i];for (int j = 0; j < frequency[x]; j++) {ans[(*returnSize)++] = x;}frequency[x] = 0;}for (int x = 0; x <= upper; x++) {for (int i = 0; i < frequency[x]; i++) {ans[(*returnSize)++] = x;}}return ans;
}

相关文章:

【LeetCode】1609. 奇偶树、1122. 数组的相对排序

作者&#xff1a;小卢 专栏&#xff1a;《Leetcode》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 1609. 奇偶树 1609. 奇偶树 题目描述&#xff1a; 如果一棵二叉树满足下述几个条件&#x…...

【C++初阶】4. Date类的实现

如果下面博客有不理解的地方&#xff0c;可以查看源码&#xff1a;代码提交&#xff1a;日期类的实现 1. 构造函数的实现 由于系统实现的默认构造函数即便采用默认值的形式也只能存在1个固定的默认日期&#xff08;例如&#xff1a;1997-1-1&#xff09;。所以&#xff0c;构…...

ES6新特性--变量声明

可以使用let关键字来声明变量let a;let b,c;//同时声明多个变量let stu = 张三;let name =李四,age = 12;//声明变量的同时赋值 let关键字使用的注意事项(1).变量在声明的时候不可以重复,这也符合其他语言的变量声明规范 let name = 李四; let name = 张三;//这里开始报错,但…...

【Django】缓存机制

文章目录缓存的介绍Django的6种缓存方式开发调试缓存dummy.DummyCache内存缓存locmem.LocMemCache文件缓存filebased.FileBasedCache⭐️数据库缓存db.DatabaseCacheMemcache缓存memcached.MemcachedCacheMemcache缓存memcached.PyLibMCCacheDjango缓存的应用内存缓存cache_pag…...

我的创作纪念日——一年的时间可以改变很多

机缘 不知不觉来到CSDN已经创作一年了。打心底讲&#xff0c;对于在CSDN开始坚持创作的原因&#xff0c;我用一句话来概括最合适不过了——“无心插柳柳成荫” 为什么这么说呢&#xff1f; 这要从我的一篇博客说起——《输入命令Javac报错详解》&#xff1a; 那也是我第一次…...

Jetson Nano驱动机器人的左右两路电机

基于Jetson Nano板子搭建一个无人车&#xff0c;少不了减速电机驱动轮子滚动&#xff0c;那如何驱动呢&#xff1f;从Jetson.GPIO库文件来说&#xff0c;里面没有支持产生PWM的引脚&#xff0c;也就意味着Jetson nano没有硬件产生PWM的能力&#xff0c;所以我们不得不使用别的方…...

如何通过openssl生成公钥和私钥?

1、生成RSA秘钥的方法 生成RSA秘钥的方法&#xff1a; openssl genrsa -des3 -out privkey.pem 2048 注&#xff1a;建议用2048位秘钥&#xff0c;少于此可能会不安全或很快将不安全。 这个命令会生成一个2048位的秘钥&#xff0c;同时有一个des3方法加密的密码&#xff0c…...

Verilog的If语句和Case语句

这篇文章将讨论 verilog 中两个最常用的结构----if语句和case语句。在之前的文章中学习了如何使用过程块&#xff08;例如always块&#xff09;来编写按顺序执行的verilog 代码。此外还可以在过程块中使用许多语句----统称为顺序语句&#xff0c;如case 语句和 if 语句。这篇文…...

HJ31 单词倒排

描述 对字符串中的所有单词进行倒排。 说明&#xff1a; 1、构成单词的字符只有26个大写或小写英文字母&#xff1b; 2、非构成单词的字符均视为单词间隔符&#xff1b; 3、要求倒排后的单词间隔符以一个空格表示&#xff1b;如果原字符串中相邻单词间有多个间隔符时&#xf…...

leetcode——203.移除链表元素

文章目录&#x1f428;1.题目&#x1fa85;2.解法1-头节点迭代&#x1f33f;2.1 思路&#x1f33f;2.2 代码实现&#x1f986;3. 解法2-创建新链表&#x1f38f;3.1 思路&#x1f38f;3.2 代码实现&#x1f410;4. 题目链接&#x1f428;1.题目 给你一个链表的头节点head和一个…...

GPT-4来袭:开启人工智能新时代

文章目录介绍GPT4 模型演示示例示例 1示例 2示例 3示例 4示例 5最后Reference介绍 2023年3月15日&#xff0c;OpenAI公司正式发布了先进的自然语言处理模型GPT-4&#xff0c;前不久发布的GPT-3.5模型只能理解文字的语言模型&#xff0c;而新发布的GPT4则是多模态模型&#xff…...

芯微电子IPO终止:业绩开始大幅下滑,王日新、王苟新兄弟不同命

近日&#xff0c;深圳证券交易所披露的信息显示&#xff0c;黄山芯微电子股份有限公司&#xff08;下称“芯微电子”&#xff09;申请撤回发行上市申请文件。因此&#xff0c;深圳证券交易所决定终止对其首次公开发行股票并在创业板上市的审核。 据贝多财经了解&#xff0c;芯…...

【C++】用手搓的红黑树手搓set和map

目录 一、set/map的底层结构 1、set/map的源码 2、利用模板区分set/map 3、利用仿函数控制比较大小 二、set/map的迭代器&#xff08;红黑树的迭代器&#xff09; 1、红黑树的begin、end迭代器 2、红黑树迭代器的operator 3、红黑树迭代器的operator-- 三、set的const…...

【C++】空指针弃NULL用nullptr

空指针&#xff08;null pointer&#xff09;不指向任何对象&#xff0c;在试图使用一个指针之前代码可以首先检查它是否为空。声明空指针的3种方法&#xff1a; int* p1 NULL; int* p2 nullptr; int* p3 0; 在C语言中常用NULL生成空指针&#xff0c;NULL是一个宏&#xf…...

【selenium学习】数据驱动测试

数据驱动在 unittest 中&#xff0c;使用读取数据文件来实现参数化可以吗&#xff1f;当然可以。这里以读取 CSV文件为例。创建一个 baidu_data.csv 文件&#xff0c;如图所示&#xff1a;文件第一列为测试用例名称&#xff0c;第二例为搜索的关键字。接下来创建 test_baidu_da…...

嵌入式硬件电路设计的基本技巧

目录 1 分模块 2 标注关键参数 3 电阻/电容/电感/磁珠的注释 4 可维修性 5 BOM表归一化 6 电源和地的符号 7 测试点 8 网络标号 9 容错性/兼容性 10 NC、NF 11 版本变更 12 悬空引脚 13 可扩展性 14 防呆 15 信号的流向 16 PCB走线建议 17 不使用\表示取反 不…...

Spring MVC 图片的上传和下载

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

远程工具神器之MobaXterm (小白必看)

目录 1、介绍 2、ssh连接详解过程 3、特点 1、介绍 带有 X11 服务器、选项卡式 SSH 客户端、网络工具等的 Windows 增强型终端。 MobaXterm 是您远程计算的终极工具箱。在单个Windows应用程序中&#xff0c;它提供了大量功能&#xff0c;这些功能是为程序员&#xff0c;网站管…...

VRIK+Unity XR Interaction Toolkit 实现VR上半身的追踪(附带VRM模型导入Unity方法和手腕扭曲的解决方法)

文章目录&#x1f4d5;第一步&#xff1a;配置 OpenXR XR Interaction Toolkit 的开发环境&#x1f4d5;第二步&#xff1a;导入人物模型⭐VRM 模型导入 Unity 的方法&#x1f4d5;第三步&#xff1a;配置 VRIK⭐给模型加上 VRIK 组件⭐将模型的头部和手部的位置作为 VR 追踪目…...

【C++进阶】map的介绍和使用

文章目录map的介绍map的模板参数介绍map的容器介绍map重要容器接口的介绍及使用构造函数增删查改迭代器的使用map的介绍 map是关联容器&#xff0c;它按照特定的次序(按照key来比较)存储由键值key和值value组合而成的元素。在map中&#xff0c;键值key通常用于排序和惟一地标识…...

第十四届蓝桥杯三月真题刷题训练——第 15 天

目录 第 1 题&#xff1a;斐波那契与7 问题描述 答案提交 运行限制 代码&#xff1a; 第 2 题&#xff1a;小蓝做实验 问题描述 答案提交 运行限制 代码&#xff1a; 第 1 题&#xff1a;斐波那契与7 问题描述 斐波那契数列的递推公式为: FnFn−1Fn−2​, 其中 F1F21…...

HTML5是什么?怎么学习HTML5?

HTML5 是什么&#xff1f;HTML5是什么&#xff1f;相信这个问题并不容易回答&#xff0c;大多数人对于HTML5的概念仅仅是听说过而已&#xff0c;非要让他说出个所以然来&#xff0c;结果只能让你失望。相比普及了近十四年的HTML4来说&#xff0c;HTML5带来的震撼其实丝毫不亚于…...

个人算法题精简导航整理(精炼汇总,含知识点、模板题、题单)

文章目录前言导航注意事项技巧类自定义Pair排序N维数组转一维位运算状态压缩算法基础枚举 √指数型枚举排列型枚举组合型枚举模拟 √日期天数问题&#xff1a;平年闰年情况递归&分治 √贪心 √货仓选址-模板题排序 √归并排序前缀和&差分 √前缀和差分&#xff08;一维…...

Mac 和 Win,到底用哪个系统学编程?

今天来聊一个老生常谈的问题&#xff0c;学编程时到底选择什么操作系统&#xff1f;Mac、Windows&#xff0c;还是别的什么。。 作为一个每种操作系统都用过很多年的程序员&#xff0c;我会结合我自己的经历来给大家一些参考和建议。 接下来先分别聊聊每种操作系统的优点和不…...

文心一言---中国版的“ChatGPT”狂飙的机会或许要出现了

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的在读研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三…...

2023最全Python+Selenium环境搭建教程-你绝对想不到有这么简单!

还有视频版本结合项目实战介绍&#xff0c;轻松学习&#xff01; PythonSelenium自动化测试环境搭建Web自动化测试全套教程_哔哩哔哩_bilibiliPythonSelenium自动化测试环境搭建Web自动化测试全套教程共计180条视频&#xff0c;包括&#xff1a;1、Web自动化测试需求和挑战、2…...

JavaSe第10次笔记

1.Java中&#xff0c;static不能修饰局部变量。 2.构造代码块&#xff1a;可用于成员变量的赋值&#xff0c;但需要注意的是&#xff0c;构造代码块最先执行(比构造方法先)。 3.静态代码块(可用于静态成员变量赋值)&#xff1a;写法如下 static { 静态成员操作; } (比构造…...

【C语言笔记】自定义类型全解

【C语言笔记】自定义类型全解一、结构体1、什么是结构体2、结构体的声明与定义2.1、结构体的声明2.2、对结构体成员的访问2.3、对结构体成员的初始化2.4、结构体的不完整声明2.5、结构体嵌套定义3、结构体的自引用3.1、错误的自引用3.2、正确的自引用4、结构体大小的计算4.1、结…...

文心一言硬刚ChatGPT。文心一言能否为百度止颓?中国版ChatGPT“狂飙”的机会在哪儿?

一.文心一言介绍 今天&#xff0c;3月16日消息&#xff0c;百度于北京总部召开新闻发布会&#xff0c;主题围绕新一代大语言模型、生成式AI产品文心一言。百度首席技术官王海峰现在详解了文心一言背后的文心大模型及技术特性。 文心一言是新一代知识增强大语言模型&#xff0…...

【RabbitMQ笔记10】消息队列RabbitMQ之死信队列的介绍

这篇文章&#xff0c;主要介绍消息队列RabbitMQ之死信队列。 目录 一、RabbitMQ死信队列 1.1、什么是死信队列 1.2、设置过期时间TTL 1.3、配置死信交换机和死信队列&#xff08;代码配置&#xff09; &#xff08;1&#xff09;设置队列过期时间 &#xff08;2&#xff…...