力扣601 体育馆的人流量

news2024/9/25 15:24:04

        在解决"连续三天及以上人流量超过100的记录"问题时,MySQL方案作为力扣解决问题的方案通过窗口函数和分组技巧高效地识别连续记录。而Python与Pandas方案作为扩展则展示了在数据处理和分析方面的灵活性,通过行号变换和分组计数来筛选符合条件的数据行。

目录

题目描述

解题思路

完整代码

使用python- pandas扩展


题目描述

表:Stadium

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| id            | int     |
| visit_date    | date    |
| people        | int     |
+---------------+---------+
visit_date 是该表中具有唯一值的列。
每日人流量信息被记录在这三列信息中:序号 (id)、日期 (visit_date)、 人流量 (people)
每天只有一行记录,日期随着 id 的增加而增加

编写解决方案找出每行的人数大于或等于 100 且 id 连续的三行或更多行记录。

返回按 visit_date 升序排列 的结果表。

查询结果格式如下所示。

示例 1:

输入:
Stadium 表:
+------+------------+-----------+
| id   | visit_date | people    |
+------+------------+-----------+
| 1    | 2017-01-01 | 10        |
| 2    | 2017-01-02 | 109       |
| 3    | 2017-01-03 | 150       |
| 4    | 2017-01-04 | 99        |
| 5    | 2017-01-05 | 145       |
| 6    | 2017-01-06 | 1455      |
| 7    | 2017-01-07 | 199       |
| 8    | 2017-01-09 | 188       |
+------+------------+-----------+
输出:
+------+------------+-----------+
| id   | visit_date | people    |
+------+------------+-----------+
| 5    | 2017-01-05 | 145       |
| 6    | 2017-01-06 | 1455      |
| 7    | 2017-01-07 | 199       |
| 8    | 2017-01-09 | 188       |
+------+------------+-----------+
解释:
id 为 5、6、7、8 的四行 id 连续,并且每行都有 >= 100 的人数记录。
请注意,即使第 7 行和第 8 行的 visit_date 不是连续的,输出也应当包含第 8 行,因为我们只需要考虑 id 连续的记录。
不输出 id 为 2 和 3 的行,因为至少需要三条 id 连续的记录。

解题思路

  1. 标记符合条件的行:首先,我们需要找出people大于等于100的行。
  2. 寻找连续的行:接着,我们需要找出这些行中id连续的部分。这一步稍微复杂,因为我们需要检查每行的id是否与前一行的id相差1。
  3. 统计连续行的数量:为了确保连续行至少有三行,我们可以使用窗口函数(如ROW_NUMBER())来为这些连续行分组,并计算每组中的行数。
  4. 筛选结果:最后,我们只保留那些组内行数大于等于3的行。

完整代码

WITH RankedStadium AS (
  SELECT 
    id, 
    visit_date, 
    people,
    -- 为连续的行分配相同的组号
    id - ROW_NUMBER() OVER (ORDER BY id) AS grp
  FROM 
    Stadium
  WHERE 
    people >= 100
),
GroupedStadium AS (
  SELECT
    id,
    visit_date,
    people,
    grp,
    -- 计算每个组内的行数
    COUNT(*) OVER (PARTITION BY grp) AS cnt
  FROM
    RankedStadium
)

-- 选择那些组内行数大于等于3的记录
SELECT 
  id, 
  visit_date, 
  people
FROM 
  GroupedStadium
WHERE 
  cnt >= 3
ORDER BY 
  visit_date;

        这段代码通过WITH语句先创建了一个临时的RankedStadium视图来找出人数大于等于100的行,并为连续的行分配相同的组号。然后在GroupedStadium视图中,它计算每个组内的行数。最后,它选择那些组内行数大于等于3的记录,并按visit_date排序。这样就能找到至少有三行连续idpeople大于等于100的记录。

通过

使用python- pandas扩展

  1. 筛选符合条件的行:首先,我们需要筛选出people字段大于等于100的行。
  2. 寻找连续的行:然后,我们需要找到id连续的行。由于id是连续增加的,我们可以通过检查当前行的id是否比前一行的id大1来判断是否连续。
  3. 标记连续的组:为了识别连续的行,我们可以用id减去行号来为每个连续的块创建一个唯一的标识符。
  4. 统计每组的行数:通过分组并统计每个组的行数,我们可以找出至少包含3行的组。
  5. 筛选结果:最后,我们筛选出那些组内行数大于等于3的行。
import pandas as pd

# 假设stadium_df是包含Stadium表数据的DataFrame
stadium_df = pd.DataFrame({
    'id': [1, 2, 3, 4, 5, 6, 7, 8],
    'visit_date': ['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04', '2017-01-05', '2017-01-06', '2017-01-07', '2017-01-09'],
    'people': [10, 109, 150, 99, 145, 1455, 199, 188]
})

# 筛选people大于等于100的行
filtered_df = stadium_df[stadium_df['people'] >= 100]

# 通过id减去行号创建组标识符
filtered_df['group'] = filtered_df['id'] - filtered_df.reset_index().index

# 计算每组的行数
group_counts = filtered_df.groupby('group').size()

# 筛选出组内行数大于等于3的组
valid_groups = group_counts[group_counts >= 3].index

# 最终结果
result_df = filtered_df[filtered_df['group'].isin(valid_groups)].drop('group', axis=1)

print(result_df)

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

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

相关文章

unity学习(46)——服务器三次注册限制以及数据库化角色信息1--数据流程

1.先找到服务器创建角色信息代码的位置,UserBizImpl.cs中: public PlayerModel create(string accId, string name, int job) {PlayerModel[] playerModelArray this.list(accId);//list是个自建函数,本质通过accId来查询if (playerModelAr…

【机器人最短路径规划问题(栅格地图)】基于模拟退火算法求解

代码获取方式:QQ:491052175 或者 私聊博主获取 基于模拟退火算法求解机器人最短路径规划问题(栅格地图)的仿真结果 仿真结果: 初始解的路径规划图 收敛曲线: 模拟退火算法求解的路径规划图 结论&#xff…

笨办法学 Python3 第五版(预览)(一)

原文:Learn Python the Hard Way, 5th Edition (Early Release) 译者:飞龙 协议:CC BY-NC-SA 4.0 模块 1:Python 入门 练习 0:准备工作 这个练习没有代码。这只是你完成的练习,让你的计算机运行 Python。…

视频编码面试基础题

视频基础知识: RGB彩色原理: RGB是指光学三原色红、绿和蓝,通过这3种的数值(0-255)改变可以组成其他颜色,全0时为黑色,全255时为白色。RGB是一种依赖于设备的颜色空间:不同设备对特定…

非阻塞IO:提高应用程序的效率与性能

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

[unity]lua热更新——个人复习笔记【侵删/有不足之处欢迎斧正】

一、AssetBundle AB包是特定于平台的资产压缩包,类似于压缩文件 相对于RESOURCES下的资源,AB包更加灵活轻量化,用于减小包体大小和热更新 可以在unity2019环境中直接下载Asset Bundle Browser 可以在其中设置关联 AB包生成的文件 AB包文件…

码垛工作站:食品生产企业的转型助推器

在当今高度自动化的工业生产中,码垛工作站的应用正逐渐成为一种趋势。某食品生产企业在面临市场竞争加剧、人工成本上升等多重压力下,决定引入码垛工作站,以期实现生产流程的升级与变革。 一、码垛工作站引入背景 该企业主要从事休闲食品的…

Github 2024-03-03 开源项目日报Top9

根据Github Trendings的统计,今日(2024-03-03统计)共有9个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量非开发语言项目4Rust项目1C项目1Jupyter Notebook项目1Python项目1Shell项目1 任天堂Switch模拟器yuzu&#x…

云计算市场,从追求“规模制胜”到走向“用户分化”

文|智能相对论 作者|叶远风 通常来说,价格战放到任何行业,都不是什么好事。 如今,作为曾经的前沿技术创新,云计算行业正在被迫走入价格战的阴霾当中,引发业界担忧。 ECS(云服务器)最高降36%…

559.n叉树的最大深度

这段代码是一个Java类Solution,其中包含一个公共方法maxDepth,用于计算一个二叉树的最大深度。这里的二叉树是一个特殊的数据结构,其中每个节点Node可能有一个或多个子节点(在这里被称为children)。下面是对代码的详细…

Manomotion 实现AR手势互动-解决手势无效的问题

之前就玩过 Manomotion ,现在有新需求,重新接入发现不能用了,不管什么办法,都识别不了手势,我记得当初是直接调用就可以的。 经过研究发现,新版本SDK改了写法。下边就写一下新版本的调用,并且实…

FRM模型十四:FRA估值

什么是FRA FRA(Forward rate agrreement)远期利率协议,是一种场外衍生品。FRA在0时刻确定,在未来时刻进行交易的协议。例如FRA3,6表示双方约定在3个月后以Rk的利率水平借款3个月。 应用场景:某公司未来3个月有融资需…

政安晨【示例演绎虚拟世界开发】(六):从制作一个对战小游戏开始(Cocos Creator 《击败老大》)(第三段)

在上一篇文章中,我们已经将游戏的场景基本搭建完毕,接下来我们就可以为游戏编写代码并实现相关的核心逻辑了。 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: AI虚拟世界大讲堂 希望政安晨的博客能够对您有所裨益&a…

多层感知机 + 代码实现 - 动手学深度学习v2 | 李沐动手学深度学习课程笔记

感知机 感知机≈二分类问题 感知机和其他问题的对比 训练感知机 如果小于等于零,说明预测错啦 ,其实就是同号为正,异号为负 举个分类的例子 增加样本,改变分类线 继续分类 感知机的收敛定理 XOR问题 XOR问题其实就是第1、3象限数…

前端学习第七天-css常用样式设置

达标要求 掌握元素的显示与隐藏 熟练应用溢出的文字隐藏 熟练掌握版心和布局流程 1. 元素的显示与隐藏 在CSS中有三个显示和隐藏的单词比较常见,我们要区分开,他们分别是 display visibility 和 overflow。 他们的主要目的是让一个元素在页面中消失…

外包干了6个月,技术退步明显

先说一下自己的情况,本科生,19年通过校招进入广州某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

(学习日记)2024.03.01:UCOSIII第三节 + 函数指针 (持续更新文件结构)

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

java-ssm-jsp-宠物护理预定系统

java-ssm-jsp-宠物护理预定系统 获取源码——》公主号:计算机专业毕设大全

勇敢尝鲜之Springboot3大坑-集成Mybatisplus报错:ddlApplicationRunner

🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 往期热门专栏回顾 专栏…

【LeetCode-1143】最长公共子序列(动归)

目录 题目描述 解法1:动态规划 代码实现 题目链接 题目描述 给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除…