![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
8.16第一周
文章平均质量分 52
zzh123353
越努力越幸运
展开
-
高度平衡的二叉搜索树的实现
系列文章目录文章目录系列文章目录概念调整方式LL型调整LR型调整RR型调整RL调整代码实现测试例子总结概念平衡二叉树建立在二叉排序树的基础上,目的是使二叉排序树的平均查找长度更小,即让各结点的深度尽可能小,因此,树中每个结点的两棵子树的深度不要偏差太大。平衡二叉树的递归定义:平衡二叉树是一棵二叉树,其可以为空,或满足如下2个性质:①左右子树深度之差的绝对值不大于1。②左右子树都是平衡二叉树。平衡因子的概念:结点的平衡因子 = 结点的左子树深度 — 结点的右子树深度。最低不平衡结点的概念:用.转载 2021-08-22 19:16:09 · 172 阅读 · 0 评论 -
LeetCode 统计优美子数组
题目 统计优美子数组给你一个整数数组 nums 和一个整数 k。如果某个 连续 子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」。请返回这个数组中「优美子数组」的数目。题解 滑动窗口class Solution {public: int numberOfSubarrays(vector<int>& nums, int k){ int res, left, right, cnt; cnt = left = right原创 2021-08-22 15:31:38 · 160 阅读 · 0 评论 -
LeetCode删除并获得点数
题目给你一个整数数组 nums ,你可以对它进行一些操作。每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] + 1 的元素。开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。题解 动态规划分析一下,其实类似于打家劫舍这道题,附链接:链接: https://blog.csdn.net/zzh123353/article/details/119809150?spm=1001.2014原创 2021-08-22 10:30:29 · 123 阅读 · 0 评论 -
LeetCode 单词拆分
题目给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。1.拆分时可以重复使用字典中的单词。2.你可以假设字典中没有重复的单词。题解 动态规划可以利用动态规划解决问题,dp[i]表示从第一个位置到第i个位置是否可以被字典中的单词组成,即转移方程dp[j] && Check(j, i - j),所以可以建立一个Set容器方便查找。class Solution {public: bool word原创 2021-08-22 09:44:57 · 84 阅读 · 0 评论 -
C++面向对象编程(下)
C++面向对象编程下文章目录C++面向对象编程下转换函数将本类型转换为其它类型将其他类型转换为本类型使用`explicit`关键字避免隐式转换伪指针(pointer-like classes)和伪函数(function-like classes)伪指针伪函数模板类模板、函数模板和成员模板总结转换函数转换函数分为两类:将本类型转换为其它类型和将其他类型转换为本类型将本类型转换为其它类型定义操作符类型名()即可将本类型转换为其它类型的函数,如下:class Fraction {public: F原创 2021-08-21 20:08:06 · 413 阅读 · 0 评论 -
LeetCode 1457二叉树中的伪回文列
题目给你一棵二叉树,每个节点的值为 1 到 9 。我们称二叉树中的一条路径是 「伪回文」的,当它满足:路径经过的所有节点值的排列中,存在一个回文序列。请你返回从根到叶子节点的所有路径中 伪回文 路径的数目。题解 遍历+hash首先要明确,伪回文序列的出现次数为奇数的数字一定不能超过1个,即最后只能有一个数字出现次数为奇数次,所以可以在遍历的时候,如果到达叶子节点时,可以进行判断hash里面的值的为基数的个数,如果超过了1个,那么久不满足条件,否则满足让结果+1。理解cnt[] + -的顺序!原创 2021-08-21 11:08:24 · 86 阅读 · 0 评论 -
LeetCode 检查子树
题目检查子树。你有两棵非常大的二叉树:T1,有几万个节点;T2,有几万个节点。设计一个算法,判断 T2 是否为 T1 的子树。如果 T1 有这么一个节点 n,其子树与 T2 一模一样,则 T2 为 T1 的子树,也就是说,从节点 n 处把树砍断,得到的树与 T2 完全相同。注意:此题相对书上原题略有改动。题解 递归判断单独写一个判断函数,如果结点不同,则返回false,如果两个树都为空了,说明前面所有结点都相同,返回true,一树空,一树不空,说明两树存在差异,返回false。/** * D原创 2021-08-21 10:05:32 · 141 阅读 · 0 评论 -
C++面向对象高级编程(上)
C++面向对象高级编程文章目录C++面向对象高级编程基于对象的程序设计不带指针成员的类--Complex为例子文件结构访问级别函数设计内联函数构造函数小结带有指针成员的类基于对象的程序设计不带指针成员的类–Complex为例子文件结构头文件Complex.h主要分为四个部分:1.防卫式声明,防止头文件被重复包含#ifndef __COMPLEX__#define __COMPLEX__/*...*/#endif2.前置声明:声明头文件中用到的类和函数#include<原创 2021-08-20 22:53:53 · 182 阅读 · 0 评论 -
LeetCode 除自身以外的数组乘积
题目 除自身以外的数组乘积给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。题解 记录左右子列乘积题目要求了时间复杂度为O(n),所以暴力解法无法生效,但是可以分别用数组记录在这个位置之前(之后)的乘积,最后让对应位置相乘,就可以达到效果,且满足条件。class Solution {public: vector<int> productExcep原创 2021-08-20 11:12:49 · 91 阅读 · 0 评论 -
LeetCode打家劫舍
题目 打家劫舍|你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。题解 动态规划动态规划求解,求出转移方程,如果房子数目>2,对于第K间房子,那么有两种情况:1.偷窃第 k 间房屋,那么就不能偷窃第 k-1 间房屋,偷窃总金额为前 k-2 间房屋的最原创 2021-08-19 19:19:06 · 52 阅读 · 0 评论 -
LeetCode 有序数组/链表转化为二叉搜索树
题目 有序数组转化为二叉搜索树给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。题解 找中点递归题目给的数组已经是升序得,找中间得位置当根节点,左边的为左子树,右边的为右子树,再去找左边的数组得中点,右边数组的中点,依次递归。/** * Definition for a binary tree node. * struct TreeNode { *原创 2021-08-18 19:31:24 · 68 阅读 · 0 评论 -
LeetCode组合总和
题目给定一个无重复元素的正整数数组 candidates 和一个正整数 target ,找出 candidates 中所有可以使数字和为目标数 target 的唯一组合。candidates 中的数字可以无限制重复被选取。如果至少一个所选数字数量不同,则两种组合是唯一的。对于给定的输入,保证和为 target 的唯一组合数少于 150 个。题解 回溯法经典回溯问题class Solution {public: void trackback(vector<int>&原创 2021-08-18 19:06:02 · 93 阅读 · 0 评论 -
LeetCode全排列
全排列|给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。题解 经典回溯回溯法的经典问题,同时使用used数组对数字是否使用进行标记。class Solution {public: vector<vector<int>> res; vector<int> ans; vector<int> used; void backtrack(vector<int>&am原创 2021-08-17 09:47:16 · 48 阅读 · 0 评论 -
验证二叉搜索树
题目给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。题解 中序遍历利用搜索二叉树的性质,中序遍历一定是一个单调递增的数组,再加一个全局变量pre来记录上一个节点的值。h/** * Definition for a binary tree node. * struct TreeNode { * int val; * Tre原创 2021-08-16 20:55:16 · 70 阅读 · 0 评论 -
LeetCode跳跃游戏
跳跃游戏|题目给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。题解| 贪心算法对于每一个值来说,i + nums[i]是可以到达的最远位置,如果这个位置>=nums.size() - 1,那么就可以到达最远位置,设置一个maxstep遍历数组的时候去不断更新这个值。class Solution {public: bool canJump(vector<int>&am原创 2021-08-16 19:44:05 · 121 阅读 · 0 评论 -
leetcode 105 从前序和中序遍历中构造二叉树
题目给定一棵树的前序遍历 preorder 与中序遍历 inorder。请构造二叉树并返回其根节点。题解 递归首先掌握前序和中序的规律。前序遍历:根->左子树->右子树,中序遍历:左子树->根->右子树;建立一个中序遍历的map映射表,方便我们找到具体的下标,首先找到根节点在两个遍历中的具体index,则可以在中序遍历中确定左子树数量inorder_root - inorder_left,右子树数量inorder_right - inorder_root,左子树的根节点在p原创 2021-08-16 16:55:19 · 51 阅读 · 0 评论