![](https://img-blog.csdnimg.cn/2020032323095712.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
leetcode
the more you do, the more you will get.
汝之宿命
这个作者很懒,什么都没留下…
展开
-
23. Merge k Sorted Lists(k个链表融合)
通过两个链表相互融合,注意如果是单数total,total=total/2+1;并且lists[total/2]=lists[total-1]代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x),原创 2020-09-12 23:57:11 · 67 阅读 · 0 评论 -
15. 3Sum(三数之和——)
我还以为我写了blog3sum,结果没找都。那就再复习一遍给定阵列nums的Ñ整数,在那里元件a,b,c 在nums使得a + b + c = 0 在给出零总和的数组中找到所有唯一的三元组。(不能重复)注意:解决方案集不得包含重复的三个数。例:给定数组nums = [-1,0,1,2,-1,-4],一个解决方案集是:[[-1, 0, 1],[-1, -1, 2]]思路:如果用列举的方式来做,时间复杂度是O(N^3), 如果需要加速,我们通过先固定一个数字,然后从后面通过双指针的原创 2020-08-30 17:49:56 · 178 阅读 · 0 评论 -
11. Container With Most Water(容纳最大的水池)
定n个非负整数a 1,a 2,…,a n ,其中每个代表坐标(i,a i)上的点。绘制n条垂直线,使线i的两个端点位于(i,a i)和(i,0)处。找到两条线,它们与x轴一起形成一个容器,以便该容器包含最多的水。注意: 您可能不会倾斜容器,并且n至少为2。思路:这个题就是要找到两个值之间围成的面积,然后求出最大值。矩形,长和宽。影响比较严重的是高,因为宽的增长是线性,而高是自由的。所以使用两个指针来从两边往中间递减,同时只有小的值才移动,因为高比较权重较大code;class Solution {原创 2020-08-30 16:56:43 · 114 阅读 · 0 评论 -
5. Longest Palindromic Substring(最长回文串)
两个思路:一个O(N^2), 一个O(N)时间复杂度思路一:n^2的是通过从每个节点往两边扩思路二:manacher算法,通过先扩展字符串用#隔开,然后遍历的过程中记录一个当前最大右边界,以当前i 为中心的回文串长度(因为加了#字符,所以相当于就是可以用这个值得出回文串长度),因为是对称的所以很容易得到另外一边的对应那个char思路1:manacher算法:首先加入#分割字符串,因为这样可以单数偶数都计算进去。然后开始遍历。几个状态量:右边界,中心点, 长度数组,最大长度,开始的地方(需要返回字原创 2020-08-30 16:20:52 · 117 阅读 · 1 评论 -
leetcode3. Longest Substring Without Repeating Characters(最长不重复子串)
Given a string, find the length of the longest substring without repeating characters.Example 1:Input: “abcabcbb”Output: 3Explanation: The answer is “abc”, with the length of 3.默认第一思路: 这个思路是我做的时候会第一想到的思路,所以先不看题解。为了找到最长不重复子串,重点就是在于处理两个相同的字符不能在同一个区间里面,原创 2020-08-30 11:08:37 · 123 阅读 · 0 评论 -
8/28京东笔试第二题(类似零钱兑换2)
设定一组数据,用这个数据组成一个target,每一个数据都是不一样的,所以一共多少种方法。类似于零钱兑换2,但是这里对于求的不是最少,而是总共所有可能。所以我们将之前的循环交换,以1- target 为止在外循环,然后内部循环是每个coin进行循环,注意下标正常。dp[0]=1作为基础。每个第一次的时候都是自己本身,所以只需要加起来就好 dp[i]= dp[ i ]+ dp[i-coin];特定target由coin组成种类数。#include<bits/stdc++.h>using n原创 2020-08-28 00:40:58 · 119 阅读 · 0 评论 -
(未收录)数组中满足左大右小的数(单调栈)
一个无序数组,找出其中的数:该数左边的数大于该数+该数右边的数小于该数维护一个单调栈,只有当 栈不空且 栈中最后一个数小于该数才pop,因为它已经不满足了左边数要大于该数条件。并且维护一个左边最小值,保证只有当当前数小于这个最小数才push代码:vector<int> getMidNum(vector<int>& nums) { vector<int> ans; int minn = INT_MAX; for (int i = 0;原创 2020-08-27 00:04:38 · 145 阅读 · 0 评论 -
(高频题目)链表相加(空间O(1))+递归+携带进位
首先,空间为O(1),因为需要空间为O(1)也就是说只有在最后进位还有但是链表已经没有了才能创建node。思路大概就是,设置值用一个链表,然后先将两个已有的节点相加。然后出来后只需要处理多余的节点和carry。注意边界节点。code/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nul原创 2020-08-26 18:11:39 · 134 阅读 · 0 评论 -
快排求第k大的数
思路就是快排结合第k大。注意两个点:一,你排序的时候,是从小到大地排序,所以如果是找倒数第k大的数字的话,应该返回的是倒数的第k个,就需要转换成n-k 个注意第二个点:在设置进入判断的时候,需要让l<=r 的时候进入判断。因为如果到了最左或者左右边,也需要进入。code#include <bits/stdc++.h>using namespace std;//错在了我的排序是顺序增长的,要看第k大应该是用 low==n-kvoid quick(vector<int>原创 2020-08-24 23:09:17 · 267 阅读 · 0 评论 -
95. Unique Binary Search Trees II(构建唯一二叉树)
给定一个整数n,生成存储值1 … n的所有结构唯一的BST(二进制搜索树) 。例:输入: 3输出:[[1,null,3,2],[3,2,null,1],[3,1,null,null,2],[2,1,3],[1,null,2,null,3]]Input: 3Output:[[1,null,3,2],[3,2,null,1],[3,1,null,null,2],[2,1,3],[1,null,2,null,3]]Explanation:The above output原创 2020-08-09 19:09:04 · 189 阅读 · 0 评论 -
495. Teemo Attacking(提莫攻击)
题目:给一个数组,再给一个间隔,数组里的都是正整数,表示从该pos开始的duration都会被覆盖。注意:如果在被覆盖的时候遇到新的开始的点,那就会重新从这个点duration覆盖,之前的清空。并且:注意对于最后一个点的覆盖要加上。思路:在每一个节点的时候,有两种选择,一个是走duration,一个是走到next node(当duration注定会走到那里)两者取最小值就可。code:class Solution {public: int findPoisonedDuration(ve原创 2020-07-31 21:57:15 · 124 阅读 · 0 评论 -
836. Rectangle Overlap矩形相交
题目:矩形以list表示[x1, y1, x2, y2],其中 (x1, y1) 分别是其左下角的坐标和其右上角(x2, y2) 的坐标。如果两个矩形的相交区域为正,则它们重叠。为了清楚起见,两个仅在角或边缘接触的矩形不重叠。给定两个(与轴对齐的)矩形,返回它们是否重叠。这题关键在于给了的是一个左下角的点和右上角的点!思路:所以我们用排除法,将不可能相交的排除,剩余的就是可能的了。如果他们有相交的,那么一定会出现一个x/y在别人里面。所以通过确定上下边界来排除相交的方法。因为左下点的x就是左边原创 2020-07-31 20:30:33 · 114 阅读 · 0 评论 -
leetcode 31下一个更大的数字next permutation
题目:给一个数组,按照排序,给出下一个更大的组合顺序,如果当年是最大的数字,那么给出最小的数字。思路:要使得这个数字比当前更大,那就得从后面往前找到第一个往下减少得位,然后再从这个之后找到第一个大于这个target得数,交换,然后再逆序(因为寻找的时候就是以从后往前递增 ,交换后还是递增,为了保证greater,所以要逆序(从target之后)代码:class Solution {public: void nextPermutation(vector<int>& nu原创 2020-07-30 15:28:40 · 620 阅读 · 0 评论 -
153.rotated 数组找最小值
假设以升序排序的数组以您不知道的某个枢轴旋转。(即 [0,1,2,4,5,6,7] 可能成为 [4,5,6,7,0,1,2])。找到最小的元素。您可以假设数组中不存在重复项。范例1:输入: [3,4,5,1,2]输出: 1不要注意:这题是没有重复的数字,否则如果当前中后都相等的时候,遍历是最好的方式不要注意2: 当left 和 right 相差只有1的时候,除以2 的结果一定为left,所以要在nums[left] 和 nums[right] 的时候判断两者是否相等。如果相等,lef原创 2020-07-23 12:50:44 · 106 阅读 · 0 评论 -
328. Odd Even Linked List(注意是第奇数/偶数个变换,不是值)
给定一个单链表,将所有奇数节点组合在一起,然后是偶数节点。请注意,这里我们谈论的是节点号,而不是节点中的值。您应该尝试就地进行。该程序应在O(1)空间复杂度和O(节点)时间复杂度下运行。范例1:输入:1->2->3->4->5->NULL输出:1->3->5->2->4->NULL方法就是循环,然后将偶放在奇后,特别要先将偶的头先保存。以当前even是否为空,和下一个odd是否为空 条件与作为循环终止条件。code:/** * De原创 2020-06-14 22:16:17 · 172 阅读 · 0 评论 -
357. Count Numbers with Unique Digits(唯一数的个数——dp+math)
给定一个非负整数n,计算所有具有唯一数字x的数字,其中0≤x <10 n。例:输入:2输出:91说明:答案应该是0≤x <100范围内的总数,不包括 11,22,33,44,55,66,77,88,99根据dp来说,n为1:10个,为2 :9*9(因为0~9还有九个数字可以用);为3时,在为2的基础上还可以选择8个数字,往后乘的数依次递减,直到为1,那时候说明n的值已经大于了9,说明数的范围到了10000 0000 00 这个时候已经不可能再有唯一数了,因为总共0~9就十个数。所以原创 2020-06-05 12:35:22 · 318 阅读 · 0 评论 -
303. Range Sum Query - Immutable(数组中的范围的和——dp)
给定一个整数数组NUMS,发现指数之间的元素的总和我和Ĵ(我 ≤ Ĵ),包括端值。例:给定nums = [-2,0,3,-5,2,-1]sumRange(0,2)-> 1sumRange(2,5)-> -1sumRange(0,5)-> -3注意:您可以假设数组没有更改。有许多对sumRange函数的调用。思路:i,j 的和,可以用dp【j+1】-dp【i】来计算出,dp【i】 为从0到i-1的和。code:class NumArray { private:原创 2020-06-05 11:56:13 · 105 阅读 · 0 评论 -
309. Best Time to Buy and Sell Stock with Cooldown(买卖股票+cooldown)有限状态机
假设您有一个数组,第i 个元素是第i天给定股票的价格。设计算法以找到最大的利润。您可以按照以下限制完成任意数量的交易(即多次购买一股股票):您可能不会同时进行多项交易(即,必须先出售股票才能再次购买)。出售股票后,第二天就不能购买股票。(即冷却1天)例:输入: [1,2,3,0,2]输出: 3说明:交易= [买,卖,冷却,买,卖]思路: 三种状态,买卖冷却。三种状态的转换,可以画出来这个示意图:来自leetcode有限状态机,通过这三种状态,s0是空闲时候,可以再次空闲;s1代原创 2020-06-05 11:16:29 · 256 阅读 · 0 评论 -
213. House Robber II(升级版偷家) dp
您是计划在街道上抢房屋的专业强盗。每个房子都藏有一定数量的钱。这个地方的所有房屋都排成一圈。这意味着第一所房子是最后一个的邻居。同时,相邻房屋已连接了安全系统, 如果在同一晚闯入两个相邻房屋,它将自动与警察联系。给定一个表示每个房屋的总金额的非负整数列表,请确定您今晚可以盗用的最大金额,而不必通知警察。范例1:输入: [2,3,2]输出: 3说明:您不能抢劫房屋1(钱= 2)然后抢劫房屋3(钱= 2),因为它们是相邻的房屋。思路:这个和之前的偷家一版本的区别在于,这个首尾两个是不可能同时存原创 2020-06-03 20:18:27 · 149 阅读 · 0 评论 -
198. House Robber(偷家贼)dp
您是计划在街道上抢房屋的专业强盗。每个房屋都有一定数量的金钱藏匿,阻止您抢劫每个房屋的唯一限制是相邻房屋都已连接了安全系统,如果两个晚上的房屋在同一晚上被闯入,它将自动与警察联系。给定一个表示每个房屋的总金额的非负整数列表,请确定您今晚可以盗用的最大金额,而不必通知警察。范例1:输入: nums = [1,2,3,1]输出: 4说明:抢劫房屋1(money = 1),然后抢劫房屋3(money = 3)。您可以抢夺的总金额= 1 + 3 = 4。思路:很简单的动态规划,后面的选择依赖于前面的原创 2020-06-03 20:07:25 · 125 阅读 · 0 评论 -
263. Ugly Number(丑数简单版)
编写程序以检查给定的数字是否是丑陋的数字。丑数是正数,其主要因子仅包括2, 3, 5。范例1:输入: 6输出: true解释: 6 = 2×3思路:如果是丑数,那么这个数一定是1,2,3,5四个数乘积起来的一个数,所以对于这个数,用这235循环去被num来除,如果最后的结果是 1,说明就是丑数了class Solution {public: bool isUgly(int num) { if(num==0) return false;原创 2020-06-03 16:01:23 · 178 阅读 · 0 评论 -
7. Reverse Integer(逆序int数)overflow问题
Given a 32-bit signed integer, reverse digits of an integer.Example 1:Input: 123Output: 321Example 2:Input: -123Output: -321如果溢出,返回0.思路:转换部分就是通过res存x的从后面的每一个数进来。但是在对于计算res之前要判断是否会溢出。利用常量INT_MAX来判断。res10>INT_MAX || res10+x%10 > INT_MAX 就不行原创 2020-06-01 15:15:09 · 132 阅读 · 0 评论 -
45. Jump Game II(跳数游戏)每阶到最大
给定一个非负整数数组,您最初位于该数组的第一个索引处。数组中的每个元素代表您在该位置的最大跳转长度。您的目标是在最少的跳数中达到最后的索引。例:输入: [2,3,1,1,4]输出: 2说明:到达最后一个索引的最小跳转数为2。从索引0到1跳1步,然后跳3步到最后一个索引。注意:您可以假设始终可以到达最后一个索引。思路从0开始,第一个作为第一阶级,算出该段的右边界,然后在这个边界里面进行遍历,找到最大右边界。然后step+1.直到在里面达到右边界>=nums最后一个位置。code原创 2020-05-31 20:17:41 · 293 阅读 · 0 评论 -
42. Trapping Rain Water(数组积水)左右同时从低到高
题目:给定n个代表海拔图的非负整数,其中每个条的宽度为1,计算下雨后它能捕获多少水。输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6思路:从两边开始,最左和最右比较,从较小的那一方开始,因为这样的话从这边开始的每一步的计算的都可以能够把水积住(因为短板效应)。设置左右的最大值,然后往中间去的过程中改变该值,如果遇见小于max的值,就用ta和max的差加到res中。code:class Solution {public: int trap(vector<int原创 2020-05-31 19:49:02 · 451 阅读 · 0 评论 -
230. Kth Smallest Element in a BST(就是一个中序遍历树)找第k小的数在搜索树中
题目如上:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr)原创 2020-05-30 20:32:52 · 1422 阅读 · 0 评论 -
279. Perfect Squares(完全平方和数/ 交换硬币题322)
给定一个正整数Ñ,找到完全平方数的数量最少(例如,1, 4, 9, 16, …),其总和Ñ。范例1:输入: n = 12输出: 3说明:12 = 4 + 4 + 4.范例2:输入: n = 13输出: 2说明:13 = 4 + 9.思路:看到这题的时候就想起了leetcode332里面的硬币交换,只不过现在是对于硬币的种类数额换成了完全平方数。存好了vector之后,就开始动态规划的。对于数额为 i 的sum,方法数为数额 i - 一个coin后的数 +1的最小值。遍历每一个coin原创 2020-05-29 20:14:58 · 148 阅读 · 0 评论 -
297. Serialize and Deserialize Binary Tree(序列化+反序列化)
序列化是将数据结构或对象转换为位序列的过程,以便可以将其存储在文件或内存缓冲区中,或者通过网络连接链接进行传输,以便稍后在相同或另一个计算机环境中进行重构。设计一种用于对二叉树进行序列化和反序列化的算法。序列化/反序列化算法的工作方式没有任何限制。您只需要确保可以将二叉树序列化为字符串,并且可以将该字符串反序列化为原始树结构。例:您可以序列化以下树:1/ 2 3/ 4 5如 “[1,2,3,null,null,4,5]”思路:其实这题很简单,主要就是在于遍历树的同时存储数据,原创 2020-05-29 16:09:08 · 148 阅读 · 0 评论 -
关于i/o stringstream的一些闲谈
IO类之stringstreamstringstream的对象与内存中的string对象建立关联, 往string对象写东西, 或者从string对象读取东西istringstream的关联是ok的, 但是ostringstream不能依赖于关联ostringstream:默认构造函数default (1) explicit ostringstream (ios_base::openmode which = ios_base::out);初始化initialization (2) explic原创 2020-05-29 15:25:57 · 197 阅读 · 0 评论 -
301. Remove Invalid Parentheses(去除最少数量得无效括号)——todo
it’s hard to understand for me. I have to spend some time learning this solution.删除无效括号的最小数目,以使输入字符串有效。返回所有可能的结果。注意: 输入字符串可能包含括号(和之外的字母)。范例1:输入: “()())()”输出: [“()()()”,“(())()”]范例2:输入: “(a)())()”输出: [“(a)()()”,“(a())()”]范例3:输入: “)(”输出: [“”]思路:原创 2020-05-29 11:58:25 · 156 阅读 · 0 评论 -
312. Burst Balloons(爆炸的气球——dp动态规划)read more
给定n气球,索引从0到n-1。每个气球上涂有由array表示的数字nums。要求您爆破所有气球。如果您爆破气球,i您将获得nums[left] * nums[i] * nums[right]硬币。这里left和right是毗邻的指标i。爆发后,left和right然后变为相邻。明智地爆破气球,找到可以收集的最大硬币数。注意:您可以想象nums[-1] = nums[n] = 1。它们不是真实的,因此您无法将其爆裂。0 ≤ n ≤ 500, 0 ≤ nums[i] ≤ 100思路:待定code原创 2020-05-28 17:14:40 · 318 阅读 · 0 评论 -
322. Coin Change(硬币兑换dp)
您会得到不同面额的硬币和总金额。编写一个函数来计算组成该数量所需的最少数量的硬币。如果这笔钱不能用硬币的任何组合来弥补,请返回-1。范例1:输入:硬币= [1, 2, 5],数量= 11输出:3说明: 11 = 5 + 5 + 1思路:这一题我是比较蒙的,一开始是用的栈来做,但是通过率不能100%,所以是错误的。然后用了dp动态规划的方法来做。关系式最重要为:dp[ i] =min(dp[i ] , dp[ i- coin ]+1 ) 就是当前amount的方法数等于和比当前的总额少coi原创 2020-05-28 12:08:55 · 368 阅读 · 0 评论 -
337. House Robber III(二叉树非相邻求最大值)
小偷又一次发现了自己的新地方。该区域只有一个入口,称为“根”。除树根外,每所房子都有一间,只有一间父母的房子。游览后,聪明的小偷意识到“这个地方的所有房屋都形成了一棵二叉树”。如果在同一晚闯入两栋直接相连的房屋,它将自动与警察联系。确定窃贼今晚可以在不通知警察的情况下抢走的最大金额。范例1:输入: [3,2,3,null,3,null,1] 3/ \2 3\ \3 1输出: 7说明: 小偷可以窃取的最大金额= 3 + 3 + 1 = 7 。思路:首先这就是对于二叉树而言,原创 2020-05-28 00:29:47 · 546 阅读 · 0 评论 -
338. Counting Bits(记录每一个数字中的1个数二进制)
给定一个非负整数num。对于每一个数字我在范围0≤I≤NUM计算1名在其二进制表示的数量,并返回它们作为一个数组。范例1:输入:2输出:[0,1,1]范例2:输入:5输出:[0,1,1,2,1,2]跟进:提出运行时间为O(n * sizeof(integer))的解决方案非常容易。但是,您能否在线性时间O(n)中 /可能在一次通过中完成?空间复杂度应为O(n)。你能像老板一样吗?无需使用c ++或任何其他语言的任何内置函数(如__builtin_popcount)即可完成此操作。思路:原创 2020-05-27 21:02:38 · 145 阅读 · 0 评论 -
347. Top K Frequent Elements(前k个众数)
给定一个非空的整数数组,返回k个最频繁的元素范例1:输入: nums = [1,1,1,2,2,3],k = 2输出:[1,2]范例2:输入: nums = [1],k = 1输出:[1]注意:你可以假设ķ始终是有效的,1≤ ķ独特元素的数量≤。您算法的时间复杂度必须好于O(n log n),其中n是数组的大小。确保答案是唯一的,换句话说,前k个频繁元素的集合是唯一的。您可以按任何顺序返回答案。思路:将所有的元素设置为pair对的,然后排序,最后输出前k个。code:class原创 2020-05-27 17:44:51 · 147 阅读 · 0 评论 -
394. Decode String(解码字符串 [ ] 来加密的)_string和char的不同与转换
给定一个编码字符串,返回其解码字符串。编码规则为:k[encoded_string],其中方括号内的encoded_string被精确重复k次。注意,保证k为正整数。您可以假设输入字符串始终有效;没有多余的空格,方括号格式正确等。此外,您可以假定原始数据不包含任何数字,并且这些数字仅用于那些重复的数字k。例如,将不会输入3a或2[4]。例子:s =“ 3 [a] 2 [bc]”,返回“ aaabcbc”。s =“ 3 [a2 [c]]”,返回“ accaccacc”。s =“ 2 [abc]原创 2020-05-27 16:43:56 · 236 阅读 · 0 评论 -
406. Queue Reconstruction by Height(队列排序根据高度)
题目:假设您有排队的人的随机列表。每个人都用一对整数描述(h, k),其中h代表该人的身高,k是该人前面且身高大于或等于的人数h。编写算法以重建队列。注意:人数少于1,100。思路:先找出最大的那一个(或多个——相等),按照k排序,后面小的数依次插入进来,完全按照k插入。因为此时进来的数一定小于已经排好了的数的。此时后面的数的 k 就是它应该在的位置。因为随便隔k个数都是大于该数的。这种方式将每个元素(h,k) 设置为一个整体这里麻烦的就是对于pair和vector的转换问题新温习到了三个部原创 2020-05-26 20:38:07 · 152 阅读 · 0 评论 -
438. Find All Anagrams in a String(同元素异构造得起始点)
题目:给定一个字符串小号和非空字符串p,找到所有开始指数p的中字谜小号。字符串仅包含小写英文字母,字符串s和p的长度均不得大于20,100。输出顺序无关紧要。思路1:一开始的思路就是通过先计算p字符串的字母次数分类, 然后去遍历s串,如果遍历到有p 中字母的.就进入开始看往后找p.size() 个进行匹配!但是…超时了.思路2:code1:class Solution { //超时了.淦 private: int letters[26]={0}原创 2020-05-26 00:22:06 · 82 阅读 · 0 评论 -
416. Partition Equal Subset Sum(数组中有无相等子数组和)
题目:给定一个仅包含正整数的非空数组,请确定该数组是否可以划分为两个子集,以使两个子集中的元素之和相等。注意:每个数组元素将不超过100。阵列大小不会超过200思路: 将数组分为两个子数组,一组得和为P集合,另一组为M集合。求sum P= sum M 是否成立。 化简后可以利用sum(nums)来计算出其中一个P。再利用dp动态规划来从P开始记录(dp[0]==1)方便设置为1.当P-其他的和 ==0了。注意其中得dp数组可能会溢出问题。code:class Solution原创 2020-05-25 20:44:13 · 111 阅读 · 0 评论 -
494. Target Sum(数组中数可正可负求和为S)
题目描述:您将获得非负整数a1,a2,…,an和目标S的列表。现在您有2个符号+和-。对于每一个整数,你应该选择从一个+和-它的新符号。找出几种分配符号的方法,以使整数和等于目标S。思路:感叹数学的美!fucking amazing。计算一个数组里面的值和为s的方法:首先有正有负,sum§-sm(n)=target.化简为 2sum§=target+ sum(nums) (左右两边加sum§+sum(N)——————P是正数部分的和,N是负数部分的和。sum(nums)是整个数组正数的和问题转化原创 2020-05-25 13:08:55 · 218 阅读 · 0 评论 -
543. Diameter of Binary Tree(二叉树的最长直径)
给定二叉树,您需要计算树直径的长度。二叉树的直径是一棵树中任何两个节点之间的最长路径的长度。此路径可能会也可能不会通过根。思路:要计算二叉树的最长直径,肯定需要遍历树,而最长直径肯定有一个相对的root节点,所以可以后序遍历了,每到达一个节点就要计算一下maxdia,最长直径是看边数的(5个node,那就是4),然后返回对于这个节点的最长边长(左右子树的最长值)。maxdia是一个全局变量。code:/** * Definition for a binary tree node. * struc原创 2020-05-25 11:31:40 · 194 阅读 · 0 评论