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

LeetCode 1141, 134, 142

目录

  • 1141. 查询近30天活跃用户数
    • 题目链接
    • 要求
    • 知识点
    • 思路
    • 代码
  • 134. 加油站
    • 题目链接
    • 标签
    • 普通版
      • 思路
      • 代码
    • 简化版
      • 思路
      • 代码
  • 142. 环形链表 II
    • 题目链接
    • 标签
    • 思路
    • 代码

1141. 查询近30天活跃用户数

题目链接

1141. 查询近30天活跃用户数

  • Activity的字段为user_idsession_idactivity_dateactivity_type

要求

  • 编写解决方案,统计截至 2019-07-27(包含2019-07-27),近 30 天的每日活跃用户数(当天只要有一条活动记录,即为活跃用户)。
  • 任意顺序 返回结果表。

知识点

  1. date_add():将日期加上指定时间的函数,第二个参数经常有interval做前缀,表示间隔。
  2. count():统计个数的函数。
  3. group by:按某些字段分组。
  4. between and:判断某个值是否在这个闭区间内。num between 20 and 30相当于num >= 30 && num <= 30

思路

本题只是统计在2019-07-27和它的前29天中每天的用户数,一天当中重复的用户算一条记录。思路很明显了,使用分组函数按天数分组,然后对用户的id使用去重统计,注意,判断条件是日期在2019-07-27和它的前29天之内。

代码

selectactivity_date day,count(distinct user_id) active_users
fromActivity
whereactivity_date between date_add('2019-07-27', interval -29 day) and '2019-07-27'
group byactivity_date

134. 加油站

题目链接

134. 加油站

标签

贪心 数组

普通版

思路

暴力的思路是:将整个数组都遍历一次,每次都判断能否以当前下标为起始加油站的下标绕环一周。但是这样会超时,因为有一个样例的gas, cost数组全都是0。

所以得想一个降低时间复杂度的方法,具体的做法就是合理利用之前计算的结果:如果从一个下标i作为起始加油站无法到达另一个下标i + k,则说明ii + k作为起始加油站的情况都无法到达i + k

这是因为如果从i无法到i + k(且k > 0),则说明当下标为i + k时,这次消耗的 比 之前积累的 还多,但是如果i比原来还大,则积累的油量变少了,就更不能到达i + k了。所以可以跳过中间的无效点,从i + k + 1处开始进行下一次的判断。当k == 0时,说明下标为i的加油站的油量比消耗的少,则从i + 1处进行下一次的判断,可以将这个分支与上面的分支并起来,即从i + k + 1处开始进行下一次的判断。

代码

class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {int n = gas.length;int i = 0;while (i < n) { // i是出发时加油站的下标int rest = 0; // rest是目前剩余的总油量int k = 0; // k是经过加油站的个数while (k < n) {int j = (i + k) % n; // j是当前经过加油站的下标rest += gas[j] - cost[j];// 如果剩余的油量比0小,则无法绕环一周,退出循环if (rest < 0) {break;}k++;}// 如果经过的加油站数等于加油站的总数,则返回这个下标if (k == n) {return i;}// 跳过中间无效的点,从i + k + 1处进行下一次的判断i += k + 1;}// 发现无法从任何一个加油站作为起始点绕环一周,返回-1return -1;}
}

简化版

思路

简化版的思想是:如果以start作为起始加油站的下标并且满足三个条件,那么start就是题目所求的答案。第一个是以小于start的值作为起始加油站的下标无法绕环一周,第二个是以start作为起始加油站的下标可以走到数组的最后一个下标,最后一个是全程的总剩余油量大于等于0(若全程的总剩余油量小于0,则无法绕环一周)。

简化版 更新起始加油站下标 的思路和普通版是一样的,但是它少了很多计算(比如取余的计算,因为简化版不需要真正绕环一周,只需要找到一个下标满足上述的三个条件),这就使得它的耗时比普通版小。

代码

class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {int total = 0; // total是总剩余的油量int rest = 0; // rest是以start作为起始加油站的下标剩余的油量int start = 0; // start是起始加油站的下标for (int i = 0; i < gas.length; i++) {int sub = gas[i] - cost[i];rest += sub;total += sub;// 如果以start作为起始加油站的下标剩余油量小于0,则将start更新到i + 1if (rest < 0) {rest = 0;start = i + 1;}}// 如果总剩余的油量小于0,则说明无法绕环一周;否则唯一解为startreturn total < 0 ? -1 : start;}
}

142. 环形链表 II

题目链接

142. 环形链表 II

标签

哈希表 链表 双指针

思路

这道题可以使用Floyd判圈算法,不知道原理的可以去看这篇文章:算法——Floyd判圈算法。

这里讲一下思路:使用快慢指针fast, slow,快指针每次走两步fast = fast.next.next,慢指针每次走一步slow = slow.next,如果发现fast == null || fast.next == null,则这个链表没有环;否则两个指针就会相遇,相遇后把慢指针slow放到链表头部head处,快指针fast不动,仍在相遇点,此时让两个指针同速,每次都只走一步fast = fast.next, slow = slow.next,直到发生第二次相遇,第二次相遇点就是环的入口

代码

public class Solution {public ListNode detectCycle(ListNode head) {ListNode fast = head;ListNode slow = head;while (fast != null && fast.next != null) {fast = fast.next.next;slow = slow.next;if (fast == slow) {slow = head;while (slow != fast) {fast = fast.next;slow = slow.next;}return slow;}}return null;}
}

相关文章:

LeetCode 1141, 134, 142

目录 1141. 查询近30天活跃用户数题目链接表要求知识点思路代码 134. 加油站题目链接标签普通版思路代码 简化版思路代码 142. 环形链表 II题目链接标签思路代码 1141. 查询近30天活跃用户数 题目链接 1141. 查询近30天活跃用户数 表 表Activity的字段为user_id&#xff0c…...

华为FPGA工程师面试题

FPGA工程师面试会涉及多个方面,包括基础知识、项目经验、编程能力、硬件调试和分析等。以下是一些必问的面试题: 基础知识题: 请解释FPGA的基本组成和工作原理。描述FPGA中的可编程互联资源以及它们在构建复杂数字电路中的作用。请解释嵌入式多用途块(如BRAM、DSP slices、…...

Windows11上安装docker(WSL2后端)和使用docker安装MySQL和达梦数据库

Windows11上安装docker&#xff08;WSL2后端&#xff09;和使用docker安装MySQL和达梦数据库 1. 操作系统环境2. 首先安装wsl2.1 关于wsl2.2 安装wsl2.3 查看可用的wsl2.4 安装ubuntu-22.042.5 查看、启动ubuntu-22.04应用2.6 上面安装开了daili2.7 wsl的更多参考 3. 下载Docke…...

UnityXR Interactable Toolkit如何实现Climb爬梯子

前言 在VR中,通常会有一些交互需要我们做爬梯子,爬墙的操作,之前用VRTK3时,里面是还有这个Demo的,最近看XRI,发现也除了一个爬的示例,今天我们就来讲解一下 如何在Unity中使用XR Interaction Toolkit实现爬行(Climb)操作 环境配置 步骤 1:设置XR环境 确保你的Uni…...

sqli-labs 靶场 less-11~14 第十一关、第十二关、第十三关、第十四关详解:联合注入、错误注入

SQLi-Labs是一个用于学习和练习SQL注入漏洞的开源应用程序。通过它&#xff0c;我们可以学习如何识别和利用不同类型的SQL注入漏洞&#xff0c;并了解如何修复和防范这些漏洞。Less 11 SQLI DUMB SERIES-11判断注入点 尝试在用户名这个字段实施注入,且试出SQL语句闭合方式为单…...

国内外网络安全现状分析

一、国内网络安全现状 1.1 国内网络安全威胁 国内的网络安全威胁主要表现在以下几个方面&#xff1a; 恶意软件&#xff1a;包括计算机病毒、蠕虫、木马和间谍软件等&#xff0c;它们能感染计算机系统、窃取敏感信息或破坏系统功能。网络钓鱼&#xff1a;通过伪装成可信任的…...

vscode copilot git commit 生成效果太差,用其他模型替换

问题 众所周知&#xff0c;copilot git commit 就像在随机生成 git commit 这种较为复杂的内容还是交给大模型做比较合适 方法 刚好&#xff0c;gitlens 最近开发了 AI commit的功能&#xff0c;其提供配置url api可以实现自定义模型 gitlens 只有3种模型可用&#xff1a…...

计算机毕业设计hadoop+spark+hive舆情分析系统 微博数据分析可视化大屏 微博情感分析 微博爬虫 微博大数据 微博推荐系统 微博预测系统

本 科 毕 业 论 文 论文题目&#xff1a;基于Hadoop的热点舆情数据分析与可视化 姓名&#xff1a; 金泓羽 学号&#xff1a; 20200804050115 导师&#xff1a; 关英 职称&…...

【MySQL】(基础篇二) —— MySQL初始用

MySQL初始用 目录 MySQL初始用基本语法约定选择数据库查看数据库和表其它的SHOW 在Navicat中&#xff0c;大部分数据库管理相关的操作都可以通过图形界面完成&#xff0c;这个很简单&#xff0c;大家可以自行探索。虽然Navicat等图形化数据库管理工具为操作和管理数据库提供了非…...

计算机网络 期末复习(谢希仁版本)第4章

路由器&#xff1a;查找转发表&#xff0c;转发分组。 IP网的意义&#xff1a;当互联网上的主机进行通信时&#xff0c;就好像在一个网络上通信一样&#xff0c;看不见互连的各具体的网络异构细节。如果在这种覆盖全球的 IP 网的上层使用 TCP 协议&#xff0c;那么就…...

如何使用Pandas处理数据?

一、技术难点 Pandas是Python中一个强大的数据处理和分析库&#xff0c;它提供了高效、灵活且易于使用的数据结构&#xff0c;主要用于数据清洗、转换、聚合和可视化等任务。然而&#xff0c;在使用Pandas处理数据时&#xff0c;也会遇到一些技术难点。 数据导入与导出&#…...

Error: spawn xdg-open ENOENT

报错&#xff1a;The CJS build of Vite’s Node API is deprecated. See https://vitejs.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details. VITE v5.1.4 ready in 2298 ms ➜ Local: http://localhost:80/ ➜ Network: http://10.0.4.13:80/ ➜…...

写给大数据开发,如何去掌握数据分析

这篇文章源于自己一个大数据开发&#xff0c;天天要做分析的事情&#xff0c;发现数据分析实在高大上很多&#xff0c;写代码和做汇报可真比不了。。。。 文章目录 1. 引言2. 数据分析的重要性2.1 技能对比2.2 业务理解的差距 3. 提升数据分析能力的方向4. 数据分析的系统过程4…...

大数据湖一体化运营管理建设方案(49页PPT)

方案介绍&#xff1a; 本大数据湖一体化运营管理建设方案通过构建统一存储、高效处理、智能分析和安全管控的大数据湖平台&#xff0c;实现了企业数据的集中管理、快速处理和智能分析。该方案具有可扩展性、高性能、智能化、安全性和易用性等特点&#xff0c;能够为企业数字化…...

大模型训练的艺术:从预训练到增强学习的四阶段之旅

文章目录 大模型训练的艺术&#xff1a;从预训练到增强学习的四阶段之旅1. 预训练阶段&#xff08;Pretraining&#xff09;2. 监督微调阶段&#xff08;Supervised Finetuning, SFT&#xff09;3. 奖励模型训练阶段&#xff08;Reward Modeling&#xff09;4. 增强学习微调阶段…...

Linux 网络设置

Linux 网络设置 查看及测试网络查看网络配置测试网络连接 设置网络地址参数使用网络配置命令修改网络配置文件 查看及测试网络 查看及测试网络配置是管理 Linux 网络服务的第一步,本节将学习 Linux 操作系统中的网络查看及测试命令。其中讲解的大多数命令以普通用户权限就可以…...

交易中的群体行为特征和决策模型

本文基于人的行为和心理特征&#xff0c;归纳出交易中群体的行为决策模型&#xff0c;并基于这个模型&#xff0c;分析股价波浪运行背后的逻辑&#xff0c;以及投机情绪的周期变化规律&#xff0c;以此指导交易&#xff0c;分析潜在的风险和机会&#xff0c;寻找并等待高性价比…...

Android14之向build.prop添加属性(二百一十九)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+AOSP…...

Cargo

Cargo cargo是rust的构建系统和包管理工具&#xff0c;在安装rust的时候就一并安装了cargo。 > cargo --version cargo 1.78.0 (54d8815d0 2024-03-26)使用cargo创建项目 cargo new hello_cargo会生成 src 源码目录Cargo.tomlCargo.lock.gitignore 仓库文件 Cargo.toml…...

大学生如何学习node.js?

1. 学习 JavaScript 基础知识 语法&#xff1a;变量、数据类型、操作符、控制结构&#xff08;if、switch、loops&#xff09;。函数&#xff1a;定义、调用、参数、作用域。对象和原型&#xff1a;对象字面量、构造函数、继承。数组&#xff1a;方法&#xff08;map、filter、…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

Python实现简单音频数据压缩与解压算法

Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中&#xff0c;压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言&#xff0c;提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...

node.js的初步学习

那什么是node.js呢&#xff1f; 和JavaScript又是什么关系呢&#xff1f; node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说&#xff0c; 需要在node.js的环境上进行当JavaScript作为前端开发语言来说&#xff0c;需要在浏览器的环境上进行 Node.js 可…...