深圳幻海软件技术有限公司 欢迎您!

【LeetCode】HOT 100(16)

2023-07-12

题单介绍:精选100道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这100道题,你就已经具备了在代码世界通行的基本能力。目录题单介绍:题目:124.二叉树中的最大路径和-力扣(Leetcode)题目的接口:解题思路:代码:过过过过啦!!!

题单介绍:

精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。

目录

题单介绍:

题目:124. 二叉树中的最大路径和 - 力扣(Leetcode)

题目的接口:

解题思路:

代码:

过过过过啦!!!!

题目:128. 最长连续序列 - 力扣(Leetcode)

题目的接口:

解题思路:

代码:

过过过过啦!!!!

写在最后:


题目:124. 二叉树中的最大路径和 - 力扣(Leetcode)

题目的接口:

  1. /**
  2. * Definition for a binary tree node.
  3. * struct TreeNode {
  4. * int val;
  5. * TreeNode *left;
  6. * TreeNode *right;
  7. * TreeNode() : val(0), left(nullptr), right(nullptr) {}
  8. * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  9. * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
  10. * };
  11. */
  12. class Solution {
  13. public:
  14. int maxPathSum(TreeNode* root) {
  15. }
  16. };

解题思路:

这道题的思路并不算难,可以说不算是一道合格的困难题,

直接用搜索去做就行,

题目的核心思路是:

1. 寻找最大路径和

2. 根据题意,当我们走到一个节点上之后,最大的路径和是:左节点 + 当前节点 + 右节点 的和 

3. 左节点的值等于 左节点本身的值 + 他自己的左节点的值,右节点思路相同

4. 所以当前节点需要返回给上一个节点的值就是 自己本身的值 + max(左节点,右节点)

5. 当然,如果出现路径和<0的情况就可以置空重新计算了。

那么代码如下:

代码:

  1. /**
  2. * Definition for a binary tree node.
  3. * struct TreeNode {
  4. * int val;
  5. * TreeNode *left;
  6. * TreeNode *right;
  7. * TreeNode() : val(0), left(nullptr), right(nullptr) {}
  8. * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  9. * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
  10. * };
  11. */
  12. class Solution {
  13. public:
  14. //最大路径和
  15. int sumMax = INT_MIN;
  16. int maxPathSum(TreeNode* root) {
  17. calSum(root);
  18. return sumMax;
  19. }
  20. private:
  21. int calSum(TreeNode* root) {
  22. if(root == nullptr) return 0;
  23. //接收左右节点的最大值
  24. int left = max(calSum(root->left), 0);
  25. int right = max(calSum(root->right), 0);
  26. //计算当前的最大路径和
  27. int MaxSum = root->val + left + right;
  28. //更新最大路径和
  29. sumMax = max(sumMax, MaxSum);
  30. //返回的值是给前面的接收节点最大值接收的
  31. return root->val + max(left, right);
  32. }
  33. };

过过过过啦!!!!

题目:128. 最长连续序列 - 力扣(Leetcode)

题目的接口:

  1. class Solution {
  2. public:
  3. int longestConsecutive(vector<int>& nums) {
  4. }
  5. };

解题思路:

这道题我一开始在想直接sort

但是他要求要O(N),我又想要用哈希来做,

但是有点不知道咋用,

主要思路如下:

遍历整个哈希,如果遇到一个没有与上一个数联结的数,就求出序列长度并更新长度,

没有与上一个数联结的数:比如说:遍历到数字2,如果没有1,这个就是没有与上一个数联结的数

代码如下:

这里补充一点:

count这个接口,是如果找到这个数就返回1,否则返回0

代码:

  1. class Solution {
  2. public:
  3. int longestConsecutive(vector<int>& nums) {
  4. unordered_set<int> st;
  5. for(auto e : nums) st.insert(e);
  6. int ans = 0;
  7. for(auto k : st) {
  8. if(!st.count(k - 1)) {
  9. int y = k;
  10. while(st.count(y + 1)) y++;
  11. ans = max(ans, y - k + 1);
  12. }
  13. }
  14. return ans;
  15. }
  16. };

过过过过啦!!!!

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树首页概览49086 人正在系统学习中