LeetCode 654. Maximum Binary Tree

本文介绍了一种构建最大二叉树的方法,通过递归方式利用数组中的元素建立一棵特殊的二叉树,其中根节点为数组中最大值,左右子树分别由最大值划分的子数组递归构建。

Given an integer array with no duplicates. A maximum tree building on this array is defined as follow:

The root is the maximum number in the array.
The left subtree is the maximum tree constructed from left part subarray divided by the maximum number.
The right subtree is the maximum tree constructed from right part subarray divided by the maximum number.
Construct the maximum tree by the given array and output the root node of this tree.

Example 1:
Input: [3,2,1,6,0,5]
Output: return the tree root node representing the following tree:

6
/ \
3 5
\ /
2 0
\
1
Note:
The size of the given array will be in the range [1,1000].

分析:用递归,l和r分别表示使用在nums[l]到nums[r]区间内的数字进行建树,每次通过idx找到l到r之间的最大值对应的下标idx,使用nums[idx]值new一个新TreeNode结点root,然后将root的左边用l~idx-1建树,右边用idx+1~r建树,然后返回root结点即完成了建树~

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
        return build(0, nums.size()-1, nums);
    }
private:
    int n;
    TreeNode* build(int l, int r, vector<int>& nums) {
        if (l > r) return NULL;
        int idx = l;
        for (int i = l + 1; i <= r; i++) {
            if (nums[i] > nums[idx]) idx = i;
        }
        TreeNode* root = new TreeNode(nums[idx]);
        root->left = build(l, idx-1, nums);
        root->right = build(idx+1, r, nums);
        return root;
    }
};


内容概要:本文为《科技类企业品牌传播白皮书》,系统阐述了新闻媒体发稿、自媒体博主种草与短视频矩阵覆盖三大核心传播策略,并结合“传声港”平台的AI工具与资源整合能力,提出适配科技企业的品牌传播解决方案。文章深入分析科技企业传播的特殊性,包括受众圈层化、技术复杂性与传播通俗性的矛盾、产品生命周期影响及2024-2025年传播新趋势,强调从“技术输出”向“价值引领”的战略升级。针对三种传播方式,分别从适用场景、操作流程、效果评估、成本效益、风险防控等方面提供详尽指南,并通过平台AI能力实现资源智能匹配、内容精准投放与全链路效果追踪,最终构建“信任—种草—曝光”三位一体的传播闭环。; 适合人群:科技类企业品牌与市场负责人、公关传播从业者、数字营销管理者及初创科技公司创始人;具备一定品牌传播基础,关注效果可量化与AI工具赋能的专业人士。; 使用场景及目标:①制定科技产品全生命周期的品牌传播策略;②优化媒体发稿、KOL合作与短视频运营的资源配置与ROI;③借助AI平台实现传播内容的精准触达、效果监测与风险控制;④提升品牌在技术可信度、用户信任与市场影响力方面的综合竞争力。; 阅读建议:建议结合传声港平台的实际工具模块(如AI选媒、达人匹配、数据驾驶舱)进行对照阅读,重点关注各阶段的标准化流程与数据指标基准,将理论策略与平台实操深度融合,推动品牌传播从经验驱动转向数据与工具双驱动。
【3D应力敏感度分析拓扑优化】【基于p-范数全局应力衡量的3D敏感度分析】基于伴随方法的有限元分析和p-范数应力敏感度分析(Matlab代码实现)内容概要:本文档围绕“基于p-范数全局应力衡量的3D应力敏感度分析”展开,介绍了一种结合伴随方法与有限元分析的拓扑优化技术,重点实现了3D结构在应力约束下的敏感度分析。文中详细阐述了p-范数应力聚合方法的理论基础及其在避免局部应力过高的优势,并通过Matlab代码实现完整的数值仿真流程,涵盖有限元建模、灵敏度计算、优化迭代等关键环节,适用于复杂三维结构的轻量化与高强度设计。; 适合人群:具备有限元分析基础、拓扑优化背景及Matlab编程能力的研究生、科研人员或从事结构设计的工程技术人员,尤其适合致力于力学仿真与优化算法开发的专业人士; 使用场景及目标:①应用于航空航天、机械制造、土木工程等领域中对结构强度和重量有高要求的设计优化;②帮助读者深入理解伴随法在应力约束优化中的应用,掌握p-范数法处理全局应力约束的技术细节;③为科研复现、论文写作及工程项目提供可运行的Matlab代码参考与算法验证平台; 阅读建议:建议读者结合文中提到的优化算法原理与Matlab代码同步调试,重点关注敏感度推导与有限元实现的衔接部分,同时推荐使用提供的网盘资源获取完整代码与测试案例,以提升学习效率与实践效果。
在准备 LeetCode 面试题时,一些高频题目和经典题型是必须掌握的,这些题目覆盖了数组、字符串、链表、树、动态规划等多个方面。以下是一些常见的 LeetCode 面试题: ### 数组与双指针类问题 - **LeetCode 160. Intersection of Two Linked Lists**:判断两个链表是否相交,并找到交点。 - **LeetCode 141. Linked List Cycle**:判断链表中是否存在环。 - **LeetCode 92. Reverse Linked List II**:反转链表的指定部分。 - **LeetCode 328. Odd Even Linked List**:将链表中的奇偶节点分开并连接到一起。 - **LeetCode 面试题 16.06. 最小差**:找到两个数组中差值最小的两个数,常用双指针法解决[^4]。 ### 字符串与哈希类问题 - **LeetCode 242. Valid Anagram**:判断两个字符串是否是变位词,通常使用哈希表或数组统计字符频率来解决[^2]。 - **LeetCode 1. Two Sum**:在数组中找出两个数使其和等于目标值,常用哈希表存储差值。 - **LeetCode 49. Group Anagrams**:将变位词分组,常用于哈希表处理字符串特征。 ### 链表类问题 - **LeetCode 2. Add Two Numbers**:两个链表表示的数字相加,需要考虑进位问题。 - **LeetCode 21. Merge Two Sorted Lists**:合并两个有序链表。 - **LeetCode 234. Palindrome Linked List**:判断链表是否是回文结构,可以使用快慢指针和反转链表结合的方法[^1]。 ### 树与图类问题 - **LeetCode 104. Maximum Depth of Binary Tree**:计算二叉树的最大深度。 - **LeetCode 102. Binary Tree Level Order Traversal**:二叉树的层序遍历。 - **LeetCode 236. Lowest Common Ancestor of a Binary Tree**:找到二叉树的最近公共祖先。 ### 排列组合与回溯类问题 - **LeetCode 面试题 08.08. 有重复字符串的排列组合**:给出有重复字符串的所有排列组合,通常使用回溯法实现[^5]。 - **LeetCode 46. Permutations**:生成不重复数字的所有排列。 - **LeetCode 78. Subsets**:生成一个数组的所有子集。 ### 动态规划类问题 - **LeetCode 70. Climbing Stairs**:爬楼梯问题,动态规划入门题。 - **LeetCode 198. House Robber**:打家劫舍问题,典型的线性动态规划。 - **LeetCode 322. Coin Change**:找零钱的最小硬币数,典型的完全背包问题。 ### 高频经典题 - **LeetCode 3. Longest Substring Without Repeating Characters**:无重复字符的最长子串,滑动窗口法的经典应用[^3]。 - **LeetCode 5. Longest Palindromic Substring**:最长回文子串,扩展中心法或动态规划解决。 - **LeetCode 8. String to Integer (atoi)**:字符串转换为整数,需考虑各种边界条件。 ### 代码示例 以下是一个判断两个字符串是否互为变位词的 Java 示例代码: ```java class Solution { public boolean isAnagram(String s, String t) { if (s.length() != t.length()) return false; int[] num = new int[26]; for (int i = 0; i < s.length(); i++) { num[s.charAt(i) - 'a']++; num[t.charAt(i) - 'a']--; } for (int i : num) { if (i != 0) return false; } return true; } } ``` ### 进阶建议 在准备 LeetCode 面试题时,不仅要掌握这些高频题目,还要理解其背后的数据结构和算法思想,例如快慢指针、双指针、滑动窗口、动态规划等。此外,代码实现要熟练,尤其是链表反转、字符串处理、数组操作等基础操作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值