LeetCode 1321, 209, 102
目录
- 1321. 餐馆营业额变化增长
- 题目链接
- 表
- 要求
- 知识点
- 思路
- 代码
- 209. 长度最小的子数组
- 题目链接
- 标签
- 暴力法
- 思路
- 代码
- 滑动窗口
- 思路
- 代码
- 102. 二叉树的层序遍历
- 题目链接
- 标签
- 思路
- 代码
1321. 餐馆营业额变化增长
题目链接
1321. 餐馆营业额变化增长
表
- 表
Customer的字段为customer_id、name、visited_on和amount。
要求
你是餐馆的老板,现在你想分析一下可能的营业额变化增长(每天至少有一位顾客)。
计算以 7 天(某日期 + 该日期前的 6 天)为一个时间段的顾客消费平均值。average_amount 要 保留两位小数。
结果按 visited_on 升序排序。
知识点
min():求最小值的函数。sum():求和的函数。round():四舍五入的函数。datediff():计算日期的差值的函数。注意:参数的顺序对结果有影响,例如datediff('2020-01-10', '2020-01-03')与datediff('2020-01-03', '2020-01-10)的结果为相反数。distinct:去除某个字段的重复值。between and:将结果限制到一个闭区间内。join on:内连接,查询两个集合的交集。
思路
本题的结果返回的是 最小日期加上6天后的所有日期 的统计,统计的数据是这7天的总营业额sum(amount)和平均营业额round(sum(amount) / 7, 2),本题的难点不在于统计,而是在于如何找到合适的统计范围。
首先,求出所有的日期(日期可能重复,要使用distinct来去重),使用子表tb_date来接收数据,然后进行多表查询和限制。
对日期的第一个限制条件(或者说是对内连接的限制条件)为:第一个表的日期tb_date.visited_on比第二个表的日期tb_c.visited_on晚0到6天,这样一来,表tb_date的每条数据 都对应 表tb_c的7条数据,tb_c的7条数据的日期tb_c.visited_on 就是 tb_date的日期tb_date.visited_on的前6天和当天,对tb_c对这7条数据进行统计即可(统计前先按照tb_date.visited_on分组)。
对日期的第二个限制条件为:>= 最小日期加上6天后的日期,求最小日期很方便,使用min(visited_on)即可求得最小日期。求完最小日期后再加上限制tb_date.visited_on >= 最小日期 + 6。
代码
selecttb_date.visited_on,sum(amount) amount,round(sum(amount) / 7, 2) average_amount
from(selectdistinct visited_onfromCustomer) tb_date
joinCustomer tb_c
ondatediff(tb_date.visited_on, tb_c.visited_on)
between0
and6
wheretb_date.visited_on >= (selectmin(visited_on)fromCustomer) + 6
group bytb_date.visited_on
209. 长度最小的子数组
题目链接
209. 长度最小的子数组
标签
数组 二分查找 前缀和 滑动窗口
暴力法
思路
看到本题,想到了一种很容易实现的思路:以数组的每个元素为子数组的第一个元素,然后往后遍历,直到超过target。然而很遗憾,这样做会超时。
代码
class Solution {public int minSubArrayLen(int target, int[] nums) {int n = nums.length;int res = Integer.MAX_VALUE;for (int left = 0; left < n; left++) {int sum = 0;for (int right = left; right < n; right++) {sum += nums[right];if (sum >= target) {res = Math.min(res, right - left + 1);break;}}}return res == Integer.MAX_VALUE ? 0 : res;}
}
滑动窗口
思路
仔细看暴力法,发现有很大一部分时间浪费在寻找子数组的最后一个元素的索引上,所以能不能想出一种方法,这种方法 在寻找到子数组的最后一个元素的索引right后 不需要 从下一个子数组的第一个元素的索引left开始寻找right。
这种方法是存在的:首先要记录right的值,然后在找到right(子数组的和大于等于target)后去除子数组头部的多余元素(这里的多余元素指的是去除该元素后子数组的值仍然大于等于target的元素)。在去除到极限(子数组的和小于target)时,让right向原数组尾部移动。重复这样的操作,直到right到达原数组尾部。
代码
class Solution {public int minSubArrayLen(int target, int[] nums) {int n = nums.length;int res = Integer.MAX_VALUE;int left = 0, right = 0, sum = 0;while (right < n) {sum += nums[right];while (sum >= target) { // 去除子数组头部的多余元素res = Math.min(res, right - left + 1); // 记住要更新res的值sum -= nums[left]; // 子数组的和变小left++; // 左端点右移}right++; // 右端点右移,寻找下一个合适的right}return res == Integer.MAX_VALUE ? 0 : res;}
}
102. 二叉树的层序遍历
题目链接
102. 二叉树的层序遍历
标签
树 广度优先搜索 二叉树
思路
本题是一道广度优先搜索的题,可以使用队列来存储二叉树每层的节点,在遍历每层节点时,记录该节点的值,并把下一层节点加入队列尾部(由于每次只遍历一层,所以不会从队列中取出下一层的节点),直到队列为空。
代码
class Solution {public List<List<Integer>> levelOrder(TreeNode root) {if (root == null) { // 如果根节点为nullreturn new ArrayList<>(); // 则返回空链表}List<List<Integer>> res = new ArrayList<>(); // 结果链表LinkedList<TreeNode> queue = new LinkedList<>(); // 存放每层节点的队列queue.offer(root); // 二叉树的第一层是根节点,将根节点放入队列while (!queue.isEmpty()) { // 直到队列为空才退出循环List<Integer> level = new LinkedList<>(); // 存放本层节点的值的链表int size = queue.size(); // 获取本层节点的数量,限制本次遍历只在当前层for (int i = 0; i < size; i++) { // 遍历本层的所有节点TreeNode curr = queue.poll(); // 取出本层的节点level.add(curr.val); // 存放本层节点的值if (curr.left != null) { // 如果当前节点的左子节点不为nullqueue.offer(curr.left); // 则将其加入队列}if (curr.right != null) { // 如果当前节点的右子节点不为nullqueue.offer(curr.right); // 则将其加入队列}}res.add(level); // 将本层节点的值放入结果链表}return res;}
}
相关文章:
LeetCode 1321, 209, 102
目录 1321. 餐馆营业额变化增长题目链接表要求知识点思路代码 209. 长度最小的子数组题目链接标签暴力法思路代码 滑动窗口思路代码 102. 二叉树的层序遍历题目链接标签思路代码 1321. 餐馆营业额变化增长 题目链接 1321. 餐馆营业额变化增长 表 表Customer的字段为custome…...
vant ( weapp ) - - - - - van-tabs组件选中下划线初始位置异常
这里写自定义目录标题 1. 当前效果展示2. 官方解释 & 方案 1. 当前效果展示 明显可以看到框内的光标位置偏移了,但当切换一次之后就会显示正常。 只有初次打开的时候,才会出现上述问题。 代码如下: <van-popup show"{{ makeSho…...
007 栈(lua)
文章目录 Lua本身支持动态数组,通过表(table)实现,它类似于Java中的ArrayList。Lua的表是灵活的数组和字典的混合体。对于栈的实现,我们可以简单地使用一个表来模拟。 这里是一个简单的Lua栈实现,它包含了p…...
SQL中Order by详解
在 MySQL 中,ORDER BY 语句用于对查询结果进行排序。 语法: SELECT column1, column2,... FROM table_name ORDER BY column_name [ASC | DESC];以下是对其主要部分的详细解释: column_name :指定要依据其进行排序的列名。 ASC…...
【git】存在git LFS文件时如何处理
目录 1. 安装 Git LFS2. 初始化 Git LFS3. 跟踪大文件4. 添加和提交文件5. 克隆和拉取包含 LFS 文件的仓库 1. 安装 Git LFS 首先,你需要在你的系统上安装 Git LFS。你可以使用以下命令来安装: 在 Linux 上 # 对于基于 Debian 的系统 (如 Ubuntu) sud…...
面向阿克曼移动机器人(自行车模型)的LQR(最优二次型调节器)路径跟踪方法
线性二次调节器(Linear Quadratic Regulator,LQR)是针对线性系统的最优控制方法。LQR 方法标准的求解体系是在考虑到损耗尽可能小的情况下, 以尽量小的代价平衡其他状态分量。一般情况下,线性系统在LQR 控制方法中用状态空间方程描…...
【运维】在 Docker 容器中指定 UTF-8 编码:方法与技巧
在 Docker 容器中指定 UTF-8 编码:方法与技巧 在日常开发中,我们常常需要确保应用程序能正确处理各种字符编码,尤其是 UTF-8 编码。在 Docker 容器中运行应用程序时,正确设置字符编码尤为重要,因为容器通常是跨平台、…...
primetime中cell和net的OCV
文章目录 前言一、Cell OCV1. POCV coefficient file2. POCV Slew-Load Table in Liberty Variation Format(LVF lib) 二、Net OCV三、如何check OCV是否已加上?总结 前言 在生产中,外界环境的各种变化,比如PVT&#…...
FlinkX学习
FlinkX学习 FlinkX安装 由于flinkx已经改名chunjun 官网已不存在 (https://gitee.com/lugela/flinkx#flinkx)这里可以看到flinkx的操作文档 1、上传并解压 unzip flinkx-1.10.zip -d /usr/local/soft/2、配置环境变量 FLINKX_HOME/usr/local/soft/flinkx-1.10 export PATH$F…...
新书速览|解密AI绘画与修图: Stable Diffusion+Photoshop
《解密AI绘画与修图: Stable DiffusionPhotoshop》 本书内容 《解密AI绘画与修图:Stable DiffusionPhotoshop》全面介绍了Photoshop和Stable Diffusion的交互方式,以及各自的AI功能和具体使用方法。除了讲解功能,还通过实际案例加…...
1111111111111
计算机视觉技术在医疗领域的应用正迅速成为推动医疗进步的关键力量。通过高级图像处理和分析,这项技术在医学影像分析(包括CT、MRI和X光图像)、实时手术辅助、患者监测和护理、以及疾病早期诊断等方面展现出巨大的潜力。然而,随着…...
云原生概念
云原生是一种新型的技术体系和方法论,旨在充分利用云计算环境的优势,使应用程序更具有弹性、可伸缩性、可靠性和效率。以下是云原生的详细解释: 定义: 云原生是一种基于分布部署和统一运管的分布式云,以容器、微服务、…...
NoSQL之Redis高可用与优化
一、Redis高可用 在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。 但是在Redis语境中,高可用的含义似乎要宽泛一些,除了保证…...
MySQL 常见存储引擎详解(一)
本篇主要介绍MySQL中常见的存储引擎。 目录 一、InnoDB引擎 简介 特性 最佳实践 创建InnoDB 存储文件 二、MyISAM存储引擎 简介 特性 创建MyISAM表 存储文件 存储格式 静态格式 动态格式 压缩格式 三、MEMORY存储引擎 简介 特点 创建MEMORY表 存储文件 内…...
Leetcode 股票买卖
买卖股票最佳时机 I II 不限制交易次数 prices [7,1,5,3,6,4] 启发思路:最后一天发生了什么? 从第0天到第5天结束时的利润 从第0天到第4天结束时的利润 第5天的利润 (第5天的利润:0/-4/4) 关键词:天…...
小白学习手册:轻松理解MQ消息队列
目录 # 开篇 RabbitMQ介绍 通讯概念 1. 初始MQ及类型 2. MQ的架构 2.1 RabbitMQ的结构和概念 2.2 RabbitMQ消息流示意图 3. MQ下载使用 3.1 Docker下载MQ参考 3.2 进入RabbitMQ # 开篇 MessagesQueue 是一个抽象概念,用于描述消息队列系统的一般特性和功能…...
electron线上更新
一、安装electron-updater npm install --save electron-updater二、在main.js中引入使用 import { autoUpdater } from electron; if (!isDev) {const serverUrl https://your-update-server.com; // 自定义更新服务器地址或GitHub Releases地址autoUpdater.setFeedURL(${…...
谈谈检测浏览器类型
前几天被问到如何检测浏览器类型,我突然发现我对此并不了解,之前的项目中也没有使用到过,只隐约记得通过一个自带的方法即可获取。所以今天特意来仔细补习一下。 核心:navigator.userAgent 1.正则表达式 2.引用外部库 3.判断浏…...
Django 和 Django REST framework 创建对外 API
1. 环境准备 确保你已经安装了 Python 和 Django。如果尚未安装 Django REST framework,通过 pip 安装它: pip install djangorestframework 2. 创建 Django 项目 如果你还没有 Django 项目,可以通过以下命令创建: django-ad…...
数据结构之“刷链表题”
🌹个人主页🌹:喜欢草莓熊的bear 🌹专栏🌹:数据结构 目录 前言 一、相交链表 题目链接 大致思路 代码实现 二、环形链表1 题目链接 大致思路 代码实现 三、环形链表2 题目链接 大致思路 代码实…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
