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 题目链接 大致思路 代码实…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
