LeetCode 1211, 55, 76

目录

  • 1211. 查询结果的质量和占比
    • 题目链接
    • 要求
    • 知识点
    • 思路
    • 代码(有问题)
    • 代码(修正)
  • 55. 跳跃游戏
    • 题目链接
    • 标签
    • 思路
    • 代码
  • 76. 最小覆盖子串
    • 题目链接
    • 标签
    • 思路
    • 代码

1211. 查询结果的质量和占比

题目链接

1211. 查询结果的质量和占比

  • Queries的字段为query_nameresultpositionrating

要求

  • 将查询结果的质量 quality 定义为:各查询结果的评分与其位置之间比率的平均值
  • 将劣质查询百分比 poor_query_percentage 定义为:评分小于 3 的查询结果占全部查询结果的百分比
  • 编写解决方案,找出每次的 query_name 、 quality 和 poor_query_percentage。
  • quality 和 poor_query_percentage 都应 四舍五入到小数点后两位
  • 任意顺序 返回结果表。

知识点

  1. round:四舍五入函数。
  2. avg:统计平均值函数。
  3. sum:求和函数。
  4. count:计数函数。
  5. group by:根据某个字段进行分组。
  6. if:对条件进行判断,如果条件成立,则返回第一个值;否则返回第二个值。例如if(num > 3, 1, 0)表示如果num大于3,就返回1,否则返回0。

思路

先定义一个概念:query_name相同的所有记录统称为一类查询。
要想获取各查询结果的评分与其位置之间比率的平均值,需要对表的query_name进行分组,然后使用avg获取每类查询的平均值。
要想获取评分小于 3 的查询结果占全部查询结果的百分比,分别计算出这类查询的劣质次数和总次数,然后用前者除以后者即可。

代码(有问题)

如果提交这样的代码,那么恭喜你,过不了最后一个样例。

selectquery_name,round(avg(rating / position), 2) quality,round(sum(if(rating < 3, 1, 0)) * 100 / count(*), 2) poor_query_percentage
fromQueries
group byquery_name

代码(修正)

因为最后一个样例的query_namenull的情况,所以应该再添加一个条件query_name is not null

selectquery_name,round(avg(rating / position), 2) quality,round(sum(if(rating < 3, 1, 0)) * 100 / count(*), 2) poor_query_percentage
fromQueries
wherequery_name is not null
group byquery_name

55. 跳跃游戏

题目链接

55. 跳跃游戏

标签

贪心 数组 动态规划

思路

本题可以使用贪心的思想解决,每步都看一下是否能跳到最后一个下标,如果能,那就返回true,否则就继续,直到遍历整个数组。当然还要满足一个前提——能从前面的下标跳到这个下标,否则从这个下标跳到最后一个下标就是一个无稽之谈。

代码

class Solution {public boolean canJump(int[] nums) {int n = nums.length;int far = 0; // 当前能跳到的最远的下标for (int i = 0; i < n; i++) {if (i > far) { // 如果不能从前面的下标跳到这个下标,就不需要再跳了break;}far = Math.max(far,i+ nums[i]); // 更新能跳到的最远距离if (far >= n - 1) { // 如果能跳到最后一个下标,就返回truereturn true;}}return false; // 遍历整个数组还找不到一个解,返回false}
}

76. 最小覆盖子串

题目链接

76. 最小覆盖子串

标签

哈希表 字符串 滑动窗口

思路

这道题看起来没有思路,其实可以这样理解这道题:对于一个子串,只要目标字符的个数足够,就可以将这个子串作为答案,然后通过去除这个子串头部的多余部分,让这个子串达到最短。题目中可能有多个这样的子串,但有一个子串的长度是最短的;如果没有这样的子串,就返回空串
首先,要统计出目标字符的个数;然后,在数组中使用两个指针i, j来指向子串的头部和尾部,并统计子串中字符的个数;接着,与目标字符的个数进行比较,如果对于每个字符都有 子串中字符的个数 >= 目标字符的个数 ,则使用两个变量left, right记录头部和尾部的指针;之后,通过向后移动子串头部的指针i来去除子串头部的多余部分,每次去除时都更新一下记录头部和尾部的指针left, right,直到这个子串不满足要求。
底下这段有点抽象,不太好描述,可以先看代码,理解代码后就理解这段话的含义了。
对于这样的思路还有一个小优化,就是使用一个变量toPass来统计目标字符的种类(也就是需要通过的条件数),并且使用一个变量passed来统计已经比目标字符个数大的个数(也就是通过条件的个数),然后每当 子串中字符的个数 == 目标字符的个数 (也就是通过了一个条件)时,让passed加1;每当 去除子串头部多余部分并且让一个字符的个数小于目标字符的个数 (也就是没有通过这个条件)时,让passed减1。

代码

class Solution {public String minWindow(String s, String t) {// 1. 准备char数组,因为使用char[]的索引比String的.charAt()方法快char[] target = t.toCharArray();char[] source = s.toCharArray();// 2. 统计目标字符的个数int[] targetCount = new int[128];for (char ch : target) {targetCount[ch]++;}// 3. 统计需要通过的条件总数int toPass = 0; // 需要通过的条件总数for (int count : targetCount) {if (count > 0) {toPass++;}}// 4. 使用两个指针指向子串的头、尾,对每个子串进行判断int passed = 0; // 已通过的条件数int[] subCount = new int[128]; // subCount用来统计某子串的字符出现次数int i = 0, j = 0;int left = -1, right = -1; // 如果left和right最后都是-1,则找不到题目要求对子串while (j < source.length) {char tail = source[j]; // tail是子串的最后一个字符subCount[tail]++;// 通过条件后让计数加一,为了避免重复增加,故只能使用==,而不能使用<=if (subCount[tail] == targetCount[tail]) {passed++;}// 如果已满足所有条件,则去除子串头部的无用字符while (passed == toPass && i <= j) {// 如果区间左右端点未赋值或有更优取值,则更新左右端点if (left == -1 || j - i < right - left) {left = i;right = j;}char head = source[i]; // head是子串的第一个字符subCount[head]--;// 由于去除字符导致一个条件没有通过,让passed减一if (subCount[head] < targetCount[head]) {passed--;}i++;}j++;}// 5. 若left == -1,说明没找到符合的答案,返回空串return left == -1 ? "" : new String(source, left, right - left + 1);}
}

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

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

相关文章

尼龙输送带的使用寿命是多久

尼龙输送带是一种常用的输送设备&#xff0c;用于物料输送和传送工作。它由尼龙帆布和橡胶等材料制成&#xff0c;具有高强度、耐磨损、耐高温、耐腐蚀等特点&#xff0c;因此在许多行业中得到广泛应用。 尼龙输送带的使用寿命主要受到以下因素的影响&#xff1a; 1.环境条件…

Kafka Streams介绍及在idea中的配置

Kafka Streams是一个用于构建实时流处理应用程序的客户端库。它基于Apache Kafka构建&#xff0c;提供了一种简单而强大的方式来处理和分析实时数据流。Kafka Streams为开发人员提供了丰富的功能和灵活性&#xff0c;使他们能够使用常用的编程语言&#xff08;如Java&#xff0…

Qt 的 d_ptr (d-pointer) 和 q_ptr (q-pointer)解析;Q_D和Q_Q指针

篇一&#xff1a; Qt之q指针&#xff08;Q_Q&#xff09;d指针&#xff08;Q_D&#xff09;源码剖析---源码面前了无秘密_qtq指针-CSDN博客 通常情况下&#xff0c;与一个类密切相关的数据会被作为数据成员直接定义在该类中。然而&#xff0c;在某些场合下&#xff0c;我们会…

这才是大模型价格战背后的真相

想必大家今天肯定被各家大模型厂商的降价新闻刷圈了&#xff0c;如果说 Meta Llama 3 的开源是国外大模型市场的搅局者&#xff0c;那 DeepSeek-V2 就是国内大模型市场的鲶鱼&#xff0c;但是价格战背后是大模型基础设施优化带来的物美价廉&#xff0c;还是浑水摸鱼的噱头&…

引擎:Shader

一、原理 创建Shader脚本&#xff0c;创建材质球&#xff0c;将物体的渲染效果Shader脚本挂载到材质球&#xff0c;最后把材质球挂到3d物体上面从而实现渲染。 二、模型边缘发光 原理&#xff1a;正对着摄像机的模型三角面边缘光最弱&#xff0c;垂直于摄像机的模型三角面边缘光…

提供操作日志、审计日志解决方案思路

操作日志 现在大部分公司一般使用SpringCloud这条技术栈&#xff0c;操作日志通过网关Gateway提供的Globalfilter统一拦截请求解析请求是比较好的选选择。 优点&#xff1a;相对于传统的过滤器、拦截器同步阻塞方案&#xff0c;SpringCloud Gateway使用的Webflux中的reactor-…

资源目录与云SSO

1、开启资源目录 2、创建资源文件夹&#xff08;根据公司业务划分&#xff09; 3、资源文件夹内创建或邀请成员 4、创建管控策略&#xff08;类型访问控制权限授权方法&#xff0c;可以授权给指定给资源文件夹或资源文件夹内成员&#xff09; 5、可信服务-委派管理员账号数量 …

解锁下载EasyRecovery2024电脑版软件 3步破解下载秘籍!

在数字时代&#xff0c;数据已成为我们生活中不可或缺的一部分。无论是工作中的重要文件&#xff0c;还是珍贵的家庭照片和视频&#xff0c;数据都承载着我们的回忆和努力。然而&#xff0c;数据的丢失也是我们常常遇到的问题。硬盘损坏、误删除、病毒攻击等都可能导致数据丢失…

Nodejs 第七十四章(微服务)

什么是微服务&#xff1f; micro servers 微服务和微前端是类似的&#xff0c;微前端就是借鉴了微服务的理念去实现的&#xff0c;那么微服务指的就是&#xff0c;将应用程序拆分成为一系列小型、独立的服务&#xff0c;每个服务都是专注于执行特定的业务&#xff0c;比如文章…

第N4周:中文文本分类

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、预备知识 中文文本分类和英文文本分类都是文本分类&#xff0c;为什么要单独拎出来个中文文本分类呢&#xff1f; 在自然语言处理&#xff08;NLP&#x…

Tomcat相关概述和部署

目录 一、Tomcat知识 1.Tomcat概述 2.Tomcat组件构成 3.Tomcat 功能组件结构 4.Tomcat的请求过程 二、tomcat服务部署 1.老样子准备工作——关闭防火墙和selinux&#xff0c;防止其对安装过程的干扰 2.将准备好的软件包拖入/opt目录下&#xff0c;进行安装JDK 3.设置J…

嵌入式学习记录6.5(内存分配/构造函数/析构函数)

目录 目录 一.c动态内存分配回收 1.1分配 1.2回收 1.3new、delete和malloc、free之间的区别(重点&#xff09; 二.构造函数 2.1功能,格式 2.2示例 三.析构函数 3.1功能&#xff0c;格式 3.2特点 3.3示例 四.思维导图/练习 4.1思维导图 4.2练习 一.c动态内存分配回…

无需复杂步骤,Win11用户轻松开启旧版文件资源管理器!

在Win11电脑操作中&#xff0c;用户可以使用到新版的文件资源管理器&#xff0c;但总是有各种错误、卡顿等问题的出现&#xff0c;所以很多用户都不喜欢新版资源管理器。接下来小编给大家介绍一个简单的方法&#xff0c;帮助Win11用户快速开启旧版文件资源管理器。 具体操作如下…

NumPy 通用函数(ufunc):高性能数组运算的利器

NumPy 通用函数&#xff08;ufunc&#xff09; 简介 NumPy 通用函数&#xff08;ufunc&#xff09;&#xff0c;代表“通用函数”&#xff0c;是一类用于对 ndarray 对象进行逐元素运算的高性能函数。ufunc 使 NumPy 能够在底层高效地利用 C 语言实现向量化操作&#xff0c;从…

【RISC-V】站在巨人的肩膀上——看开源芯片、软件生态、与先进计算/人工智能/安全的结合

目录 会议议程专题二&#xff1a;RISC-V与先进计算基于RISC-V的后量子密码芯片设计&#xff0c;刘冬生&#xff0c;华中科技大学存算一体集成芯片&#xff0c;刘琦&#xff0c;复旦大学面向端侧大模型计算的RISC-V矩阵扩展架构&#xff0c;复旦大学&#xff0c;韩 军 专题五&am…

开源基于Rust编写的Web服务器

基于 RUST 的 WEB 资源服务器 Github 地址 LTPP-GIT 地址 官方文档 该项目于 2024 年 5 月 1 日开始开发 预期功能 功能支持情况当前情况多线程支持是是服务支持配置化是是防盗链支持是是gzip 支持是是反向代理支持是是自定义状态码对应资源文件是是日志支持是是负载均衡支…

easyexcel模板填充列表

引入依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version></dependency>编写模板 编写代码 public class FillData {private String name;private Double number;pu…

如何解决 Zabbix模板同步超时:解决运维技术领域的BugFailed to sync Zabbix template due to timeout

如何解决 Zabbix模板同步超时&#xff1a;解决运维技术领域的BugFailed to sync Zabbix template due to timeout 原创作者&#xff1a; 猫头虎 作者微信号&#xff1a; Libin9iOak 作者公众号&#xff1a; 猫头虎技术团队 更新日期&#xff1a; 2024年6月6日 博主猫头虎…

003 Spring注解

文章目录 PathVariable和RequestParamPathVariable 示例RequestParam 示例 GetMapping、PostMapping、PutMapping、DeleteMapping1. GetMapping2. PostMapping3. PutMapping4. DeleteMapping总结 Autowired和ResourceAutowired使用场景如何使用注意事项 Resource1. Resource的作…

毛坏房无从下手,不知道怎么装

毛胚房装修步骤      1验房,      2,借钱      3,出设计图施工图      4,决定找公司还是自装      5,拆除墙体      6,安装中央空调或风管机      7,改水电      8,做地暖      9封阳台      10,做防水      11,铺瓷砖      1…