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

网站编辑是什么工作/自媒体怎么做

网站编辑是什么工作,自媒体怎么做,代码交易网站,做全景的网站文章目录 【LeetCode热题100】打卡第31天:买卖股票的最佳时机&二叉树中的最大路径和⛅前言 买卖股票的最佳时机🔒题目🔑题解 二叉树中的最大路径和🔒题目🔑题解 【LeetCode热题100】打卡第31天:买卖股票…

文章目录

  • 【LeetCode热题100】打卡第31天:买卖股票的最佳时机&二叉树中的最大路径和
    • ⛅前言
  • 买卖股票的最佳时机
    • 🔒题目
    • 🔑题解
  • 二叉树中的最大路径和
    • 🔒题目
    • 🔑题解

【LeetCode热题100】打卡第31天:买卖股票的最佳时机&二叉树中的最大路径和

⛅前言

大家好,我是知识汲取者,欢迎来到我的LeetCode热题100刷题专栏!

精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。在此专栏中,我们将会涵盖各种类型的算法题目,包括但不限于数组、链表、树、字典树、图、排序、搜索、动态规划等等,并会提供详细的解题思路以及Java代码实现。如果你也想刷题,不断提升自己,就请加入我们吧!QQ群号:827302436。我们共同监督打卡,一起学习,一起进步。

博客主页💖:知识汲取者的博客

LeetCode热题100专栏🚀:LeetCode热题100

Gitee地址📁:知识汲取者 (aghp) - Gitee.com

Github地址📁:Chinafrfq · GitHub

题目来源📢:LeetCode 热题 100 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台

PS:作者水平有限,如有错误或描述不当的地方,恳请及时告诉作者,作者将不胜感激

买卖股票的最佳时机

🔒题目

原题链接:121.买卖股票的最佳时机

image-20230702114800884

🔑题解

  • 解法一暴力(超时)

    class Solution {public int maxProfit(int[] prices) {int max = 0;for (int i = 0; i < prices.length; i++) {for (int j = i + 1; j < prices.length; j++) {int price = prices[j] - prices[i];if (price > max) {max = price;}}}return max;}
    }
    

    复杂度分析:

    • 时间复杂度: O ( n 2 ) O(n^2) O(n2)
    • 空间复杂度: O ( 1 ) O(1) O(1)

    其中 n n n 为数组中元素的个数

    代码优化动态规划(时间优化)

    前面我们使用最为简单的暴力枚举,可以发现有很多重复性的计算,每次我们都需要去循环遍历重复计算当前元素左侧最大的一个元素,这显然是没有必要的,我们可以使用使用 一个 dp 数组来记录当前元素右侧最小的元素,我们从前往后遍历,①比当前元素小要么是上一个元素左侧最小值,②要么左侧没有比当前元素小的,那么当前的dp应该设置为当前元素,所以最终的动态转移方程就可以是dp[i]=Math.min(dp[i-1],prices[i])

    class Solution {public int maxProfit(int[] prices) {int[] dp = new int[prices.length];// 这里需要初始化第一个元素,从第二个元素开始进行状态转移计算dp[0] = prices[0];for (int i = 1; i < prices.length; i++) {dp[i] = Math.min(dp[i - 1], prices[i]);}int max = 0;for (int i = 0; i < prices.length; i++) {max = Math.max(max, prices[i]-dp[i]);}return max;}
    }
    

    复杂度分析:

    • 时间复杂度: O ( n ) O(n) O(n)
    • 空间复杂度: O ( n ) O(n) O(n)

    其中 n n n 为数组中元素的个数

    代码优化利用一个变量来记录左侧最小值(时间和空间优化)

    上面我们使用动态规划,利用一个 dp 数组来记录当前元素左侧最小值,我们可以惊奇的发现在使用 dp 时,我们并没有用到 dp[i] 右侧的元素,我们可以完全省掉这个数组,改用一个变量来记录当前元素左侧最小值,同时也只需要一次循环,在从左往右遍历的过程中就能够实现左侧最小值的更新,以及当前值的计算,这样既节省了内存消耗,又节省了时间消耗,从而大大提高代码的性能

    class Solution {public int maxProfit(int[] prices) {int leftMin = prices[0];int max = 0;for (int i = 0; i < prices.length; i++) {leftMin = Math.min(leftMin, prices[i]);max = Math.max(max, prices[i] - leftMin);}return max;}
    }
    

    复杂度分析:

    • 时间复杂度: O ( n ) O(n) O(n)
    • 空间复杂度: O ( 1 ) O(1) O(1)

    其中 n n n 为数组中元素的个数

二叉树中的最大路径和

🔒题目

原题链接:124.二叉树中的最大路径和

image-20230702114835748

🔑题解

  • 解法一:递归

    题解大致思路:首先我们需要理解题目的意思,先是理解什么是路径,其实就是 一笔画能够得到路径的最大值

    image-20230703183910079

    上面这棵树的最大路径和,就是7+11+4+8+13=48

    image-20230703184050535

    以3为根节点,组成的二叉树只有3,此时这棵树所有节点能够组合起来的最大值就是3,同理可以知道4、和6的最大路径分别是它们本身;现在以2为根节点,组成的二叉树就是 2,3,4,此时这颗树组和起来的最大值就是 9,同理可以计算出 -8的最大路径是-2,而1的最大路径是 2、4、1,也就是7,因为1的右子树小于0,所以最大路径的组合不需要右子树,左子树我们要选用左节点左右子树中较大路径,左节点,也就是Math.max(cur.left.left, cur.left.left)

    通过上面对题目的解析,其实我们可以总结出一个计算公式,也就是当前节点能够形成的最大路径是cur.val+Math.max(cur.left, 0)+Math.max(cur.right, 0),这个公式的意思就是当前节点 cur 能够形成的最大路径的组成是当前值 cur.val还有左子树构成路径的最大值,如果左子树的最大值小于0,则直接舍弃,还有右子树构成路径的最大值,同理小于0直接舍弃。但是对于

    class Solution {private int maxPathSum = Integer.MIN_VALUE;public int maxPathSum(TreeNode root) {calculateMaxPathSum(root);return maxPathSum;}private int calculateMaxPathSum(TreeNode root) {if (root == null) {return 0;}// 计算左子树的最大路径和int leftMax = Math.max(calculateMaxPathSum(root.left), 0);// 计算右子树的最大路径和int rightMax = Math.max(calculateMaxPathSum(root.right), 0);// 当前节点能够构成的最大路径和int curMax = root.val + Math.max(leftMax, 0) + Math.max(rightMax, 0);// 更新目前最大路径和maxPathSum = Math.max(maxPathSum, curMax);// 返回子节点下左右子树中较大的路径和return root.val + Math.max(leftMax, rightMax);}
    }
    

    复杂度分析:

    • 时间复杂度: O ( n ) O(n) O(n),需要访问每一个节点
    • 空间复杂度: O ( n ) O(n) O(n),递归的次数取决于树的高度,最好情况(树是一颗完全平衡二叉树) l o g n logn logn,最坏情况(树是单链表) n n n

    其中 n n n 为数组中元素的个数

http://www.jmfq.cn/news/5019049.html

相关文章:

  • wordpress有趣的插件/seo推广论坛
  • 开发网站用什么语言好/如何做好seo基础优化
  • 科技论文发表网/福州seo网站排名
  • 做酒店网站的公司/惠州百度seo
  • 快速域名网站备案/网站运营是做什么的
  • 怎样做网站二级页面/品牌网络推广怎么做
  • 高密市网站建设/泉州seo优化
  • 广州做网站平台/唐老鸭微信营销软件
  • 一站式织梦网站模板/陕西seo推广
  • 网站数据搬家/如何进行网站性能优化?
  • 做企业内部管理网站要多久/上海广告公司
  • 浙江网站搭建/网页游戏推广平台
  • 门户网站建设经验交流/360优化大师最新版下载
  • 怎么快速建设小型外贸网站/seo是什么简称
  • 个人做网站多少钱/网络公司品牌推广
  • 网站难做吗/企业站seo外包
  • 韩城做网站/搜狗网站收录入口
  • 网站建设精美模板/百度推广非企代理
  • 无锡网站制作网站建设/上海网络优化seo
  • 网站安全软件/手机app安装下载
  • 黑龙江做网站的公司/友谊平台
  • 下列不能反应企业网站建立网络/一天赚2000加微信
  • 泊头在哪做网站比较好/百度官网下载安装免费
  • 工程建设造价全过程监督网站/seo技术培训教程
  • 南京大型网站设计公司/谷歌sem服务商
  • 嵌入式软件开发职业规划/西安自动seo
  • wordpress_子网站重命名/seo技术培训唐山
  • 有没有专门做卡通长图的网站/免费检测网站seo
  • wordpress 主题缺少style.css/seo推广 课程
  • 京东网站建设费用/seo优化推广多少钱