wy的leetcode刷题记录_Day47

news2024/12/30 3:56:03

wy的leetcode刷题记录_Day47

声明

本文章的所有题目信息都来源于leetcode
如有侵权请联系我删掉!
时间:2022-11-20

前言


目录

  • wy的leetcode刷题记录_Day47
    • 声明
    • 前言
    • 799. 香槟塔
      • 题目介绍
      • 思路
      • 代码
      • 收获
    • 105. 从前序与中序遍历序列构造二叉树
      • 题目介绍
      • 思路
      • 代码
      • 收获

799. 香槟塔

今天的每日一题是:799. 香槟塔

题目介绍

我们把玻璃杯摆成金字塔的形状,其中 第一层 有 1 个玻璃杯, 第二层 有 2 个,依次类推到第 100 层,每个玻璃杯 (250ml) 将盛有香槟。

从顶层的第一个玻璃杯开始倾倒一些香槟,当顶层的杯子满了,任何溢出的香槟都会立刻等流量的流向左右两侧的玻璃杯。当左右两边的杯子也满了,就会等流量的流向它们左右两边的杯子,依次类推。(当最底层的玻璃杯满了,香槟会流到地板上)

例如,在倾倒一杯香槟后,最顶层的玻璃杯满了。倾倒了两杯香槟后,第二层的两个玻璃杯各自盛放一半的香槟。在倒三杯香槟后,第二层的香槟满了 - 此时总共有三个满的玻璃杯。在倒第四杯后,第三层中间的玻璃杯盛放了一半的香槟,他两边的玻璃杯各自盛放了四分之一的香槟,如下图所示。
在这里插入图片描述

现在当倾倒了非负整数杯香槟后,返回第 i 行 j 个玻璃杯所盛放的香槟占玻璃杯容积的比例( i 和 j 都从0开始)。

示例 1:
输入: poured(倾倒香槟总杯数) = 1, query_glass(杯子的位置数) = 1, query_row(行数)= 1
输出: 0.00000
解释: 我们在顶层(下标是(0,0))倒了一杯香槟后,没有溢出,因此所有在顶层以下的玻璃杯都是空的。

示例 2:
输入: poured(倾倒香槟总杯数) = 2, query_glass(杯子的位置数) = 1, query_row(行数)= 1
输出: 0.50000
解释: 我们在顶层(下标是(0,0)倒了两杯香槟后,有一杯量的香槟将从顶层溢出,位于(1,0)的玻璃杯和(1,1)的玻璃杯平分了这一杯香槟,所以每个玻璃杯有一半的香槟。

思路

方法一:简单模拟思路(线性DP):首先我们将所有的香槟全部导入最上面那一层。然后往下流到下一层,这里的操作就是将将上一层杯子的容量-1\2然后赋值给下面那一层接住他流出的香槟的那个杯子。依次类推,特别注意的是位于每一层起始位置和结束位置的杯子,只能接收上一层一个杯子(也是最边上的)流出的香槟,而中间的杯子可以接收上一层的俩个杯子(处于中间)。

代码

class Solution {
    public:
        double champagneTower(int poured, int query_row, int query_glass) {
            vector<double> count={(double)poured};//上一层的余量 可以>1的 相当于递归 从这个杯子开始有这么多的量往下倒
            for(int i=1;i<=query_row;i++){
                vector<double> arr(i+1);

                arr[0]=max(0.0,count[0]-1)/2;
                arr[i]=max(0.0,count[i-1]-1)/2;
                for(int j=1;j<i;j++)
                {
                    arr[j]=(max(0.0,count[j-1]-1)+max(0.0,count[j]-1))/2;
                }
                count=arr;
            }
            return min(1.0,count[query_glass]);
        }
};

收获

简单模拟题,需要读通题意,一开始没理解题目就以为每一层的每个杯子都是来着上面一层的俩个杯子的香槟,然后一直想着用数学方法搞定…

105. 从前序与中序遍历序列构造二叉树

105. 从前序与中序遍历序列构造二叉树

题目介绍

给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。

示例 1:
在这里插入图片描述
输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
输出:[3,9,20,null,null,15,7]

示例 2:
输入: preorder = [-1], inorder = [-1]
输出: [-1]

思路

跟昨天的根据中后序来构造树一样,关于中序的特征我就不说了,对于前序序列来说第一个元素就是本序列所代表的树的根节点,于是后续过程其实就跟后序序列一样了,将前序序列中的第一个元素切割掉,然后根据中序序列中寻找出来的左子树和右子树序列的长度按顺序分割前序序列。

代码

/**
 * 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) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        if(preorder.size()==0||inorder.size()==0)
            return nullptr;
        return travel(inorder, 0, inorder.size(), preorder, 0, preorder.size());
    }

    TreeNode* travel (vector<int>& inorder, int inorderBegin, int inorderEnd,vector<int>& preorder, int preorderBegin, int preorderEnd) {
        if (preorderBegin == preorderEnd) 
            return NULL;
        int rootValue = preorder[preorderBegin]; // 注意⽤preorderBegin 不要⽤0
        TreeNode* root = new TreeNode(rootValue);
        if (preorderEnd - preorderBegin == 1) 
            return root;
        int delimiterIndex;
        for (delimiterIndex = inorderBegin; delimiterIndex < inorderEnd;delimiterIndex++)
         {
            if (inorder[delimiterIndex] == rootValue)
                 break;
        }
        // 切割中序数组
        // 中序左区间,左闭右开[leftInorderBegin, leftInorderEnd)
        int leftInorderBegin = inorderBegin;
        int leftInorderEnd = delimiterIndex;
        // 中序右区间,左闭右开[rightInorderBegin, rightInorderEnd)
        int rightInorderBegin = delimiterIndex + 1;
        int rightInorderEnd = inorderEnd;
        // 切割前序数组
        // 前序左区间,左闭右开[leftPreorderBegin, leftPreorderEnd)
        int leftPreorderBegin = preorderBegin + 1;
        int leftPreorderEnd = preorderBegin + 1 + delimiterIndex - inorderBegin; // 终⽌位置是起始位置加上中序左区间的⼤⼩size
        // 前序右区间, 左闭右开[rightPreorderBegin, rightPreorderEnd)
        int rightPreorderBegin = preorderBegin + 1 + (delimiterIndex - inorderBegin);
        int rightPreorderEnd = preorderEnd;
        root->left = travel(inorder, leftInorderBegin, leftInorderEnd, preorder,leftPreorderBegin, leftPreorderEnd);
        root->right = travel(inorder, rightInorderBegin, rightInorderEnd, preorder,rightPreorderBegin, rightPreorderEnd);
        return root;
    }
};

收获

更加深入的了解了前序遍历的一个过程,以及其生成的前序序列的特点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/25503.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

优思学院|精益六西格玛的成本效益怎么样?

所有精益六西格玛的实施都以项目工作为中心&#xff0c;因此可以用投资回报率&#xff08;ROI&#xff09;确定成本效益。项目可以集中在通过改善营收或降低成本&#xff08;或两者&#xff09;来提高净利润。 它们也可以侧重于通过减少资产&#xff08;通常是库存或应收账款&…

迅为IMX8M开发板2gst-inspect-1.0测试

gstreamer 开发中&#xff0c;一般开发思路为&#xff1a;寻找命令行实现--命令行验证--将命令行集成到代码中---代码工程 化。当然如果你要代码更优雅一点&#xff0c;可以用命令行用对应的 API 来实现。本节来总结一下 gstreamer 的常用 使用过程。 gst-inspect 可以查看插件…

新鲜出炉,Linux眼花缭乱的小寄巧

14天学习训练营导师课程&#xff1a; 互联网老辛《 符合学习规律的超详细linux实战快速入门》 努力是为了不平庸~ 学习有些时候是枯燥的&#xff0c;但收获的快乐是加倍的&#xff0c;欢迎记录下你的那些努力时刻&#xff08;学习知识点/题解/项目实操/遇到的bug/等等&#xf…

MySQL_数据库的约束

文章目录 1. NULL约束 2. UNIQUE(唯一约束) 3. DEFAULT(默认值约束) 4. PRIMARY KEY(主键约束) 5. FOREIGN KEY(外键约束) 数据库的约束就是关系型数据库给我们提供的一种"校验数据"合法性的机制 1. NULL约束 创建表时,可以指定某列不为空 create table stud…

MindFusion Scheduler for JavaScript 2.0 Crack

用纯 JAVASCRIPT 编写的交互式调度库--MindFusion Scheduler for JavaScript MindFusion 为所有需要呈现交互式时间表、活动日程或约会日历的应用程序提供了完整的解决方案。完全响应、高度可定制且易于集成的 JavaScript 调度库&#xff0c;您可以根据需要快速编程。 本土化 本…

Centos7 linux 中 防火墙操作命令及SSH远程连接

文章目录查看防火墙状态开启防火墙关闭防火墙查看对外开放的端口状态对外开发端口SSH 工具远程连接VMware 虚拟机查看防火墙状态 systemctl status firewalld开启防火墙 systemctl start firewalld若遇到无法开启 先用&#xff1a;systemctl unmask firewalld.service 然后&a…

Java继承——抽象类与接口的比较以及内部类、匿名类、异常类......

文章目录壹、抽象类与接口的比较贰、内部类叁、匿名类&#xff08;匿名内部类&#xff09;肆、异常类&#xff08;Exception&#xff09;壹、抽象类与接口的比较 1、抽象类与接口都可以有抽象方法&#xff1b; 2、接口中只可以有常量&#xff0c;不可以有变量&#xff1b;而抽…

Mac | 使用 Wineskin 在 Mac 上运行 exe 程序

​1 Wineskin 简介 Wineskin is a user-friendly tool used to make ports of Microsoft Windows software to macOS. 很多实用工具只有 Windows 版本&#xff0c;而 Mac 机器本身不支持运行 exe 程序&#xff0c;除了安装双系统、虚拟机等方法外&#xff0c;Wineskin 可以将…

使用HTML+CSS实现一个静态页面——面包蛋糕 (9页)

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

xlsx库实现纯前端导入导出Excel

前言 最近做了前端导入、导出 Excel 的需求&#xff0c;用到了js-xlsx这个库&#xff0c;该库文档提供的用例很少&#xff0c;并不是很友好。本文总结一下我是如何实现需求的。 需求 提供一个 Excel 文件&#xff0c;将里面的内容转成 JSON 导入数据提供一个 JSON 文件&…

3D-2D:PnP

直接线性变换 Perspective-n-Point 是求解3D到2D点对运动的方法。它描述了已知n个3D空间点及其投影位置时&#xff0c;如何估计相机的位姿。 2D-2D的对极几何方法需要8个或8个以上的点对(以八点法为例)&#xff0c;且存在初始化、纯旋转和尺度的问题。然而&#xff0c;如果两张…

【数据挖掘】数据预处理

Outline ChapterOverview1.为什么要对数据预处理2.数据描述性总结3.数据清洗4.数据变换5.数据整合6.数据归约7.离散化与概念层级8.总结Chapter 1. 为什么要预处理 我们从现实生活中获得的原始数据&#xff0c;或多或少会因为各种原因不能直接使用。例如&#xff1a; 不完整 …

K8S Pod Sidecar 应用场景之一-加入 NGINX Sidecar 做反代和 web 服务器

Kubernetes Pod Sidecar 简介 Sidecar 是一个独立的容器&#xff0c;与 Kubernetes pod 中的应用容器一起运行&#xff0c;是一种辅助性的应用。 Sidecar 的常见辅助性功能有这么几种&#xff1a; 服务网格 (service mesh) 代理监控 Exporter&#xff08;如 redis exporter)C…

【附源码】计算机毕业设计JAVA学校食堂订餐管理

【附源码】计算机毕业设计JAVA学校食堂订餐管理 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA my…

Java#20(包和final)

目录 一.包 1.包的作用? 2.包名书写的规则? 3.什么是全类名? 4.什么时候需要导包? 什么时候不需要导包? 二.final 三.常量 实际开发中&#xff0c;常量一般作为系统的配置信息&#xff0c;方便维护&#xff0c;提高可读性 四.权限修饰符 五.静态代码块 一.包 1…

简述使用vue使用webpack脚手架创建项目并升级至webpack4

第一步、输入命令 vue init webpack demo2 &#xff08;demo2表示项目名称&#xff09;&#xff0c;回车后等待项目完成创建&#xff1b; 第二步、打开package.json&#xff0c;升级以下依赖&#xff08;建议升级一项依赖后运行一下项目&#xff09; webpack系列webpack 3.6.…

Vue实现下载及文件重命名

效果如下&#xff1a; 实现步骤&#xff1a; html&#xff1a; <el-table-column prop"name" label"操作" align"center" header-align"center" width"165"><template slot-scope"scope"><el-but…

MindSpore和Python中nn.Unfold的区别

在往MindSpore迁移项目中遇到了这个转换&#xff0c;以至于不得不去仔细研究一下。 Unfold是卷积操作中的一部分&#xff0c;我们来看一下描述。 Unfold()函数是从一个batch图片中&#xff0c;提取出滑动的局部区域块&#xff0c;也就是卷积操作中的提取kernel filter对应的滑…

图片如何加水印?教你几招轻松加

相信很多喜欢出门游玩的小伙伴&#xff0c;会习惯将旅途中遇到的风景、趣事将其拍照记录下来&#xff0c;然后将图片分享到社交账号上去&#xff0c;但是互联网上什么人都有&#xff0c;总会有不怀好意的人&#xff0c;会在网上拿别人辛苦拍摄的照片&#xff0c;据为己有去发布…

开放式运动耳机哪款好,盘点几款目前最好的开放式耳机分享

如果是在户外运动的时候喜欢戴耳机&#xff0c;那么必然是要选择骨传导耳机&#xff0c;开放式耳道的设计在跑步的过程中&#xff0c;可以很快察觉到来往行人车辆&#xff0c;在安全方面能够极大缩小隐患的发声&#xff0c;无需入耳的佩戴设计能够以最大程度的释放我们的耳道长…