LeetCode 1075,1103,121,42

1075. 项目员工 I

题目链接

1075. 项目员工 I

要求

查询每一个项目中员工的平均工作年限,精确到小数点后两位。

  • P r o j e c t Project Project表中有project_idemployee_id的字段。
  • E m p l o y e e Employee Employee表中有employee_idnameexperience_years的字段。

知识点

  1. round(a, b)
    将一个小数精确到小数点后两位需要使用 M y S Q L MySQL MySQL中的四舍五入函数round(a, b),其中,a为一个浮点数,b为要精确的位数。例如,round(3.14, 1)表示将3.14四舍五入到小数点后第一位,结果为3.1。
  2. avg(f)
    求平均值需要使用到 M y S Q L MySQL MySQL中的求平均值函数avg(f),其中,f为统计的字段名。例如,avg(experience_years)表示对表中的experience_years字段求平均值。
  3. 内连接 join
    对于两个或更多个表的题,一般都会有连接的需求,对于本题来说,使用的是内连接,即求两个表的交集。(如果是外连接求的是一个集合加上它与另一个集合的交集
  4. 起别名 as
    给一个字段起别名时可以使用as,当然也可以不使用。例如,experience AS expexperience exp等价,但要注意原名和别名之间的空格不能少。
  5. 分组 group by f
    对于求平均值、求最值、计数等这类的聚合函数,经常与分组一起使用,因为没有必要求1条数据的平均值、最值等。分组的语法是group by f,即按字段f对这张表进行分组,f相同的值放在一组。例如,group by project_id表示按project_id对每条数据进行分组。

思路

本题还是十分简单的,一个项目有多个员工,每个员工都有属于自己的工作年限,要求一个项目中员工的平均工作年限只需要对该项目所有员工的工作年限求平均值即可,然后按项目的id进行分组。

代码

selectproject_id,round(avg(experience_years), 2) average_years
fromProject p
joinEmployee e
onp.employee_id = e.employee_id
group byproject_id

1103. 分糖果 II

题目链接

1103. 分糖果 II

标签

模拟、数学

思路

题目要求给第一个小朋友1颗糖果,给第二个小朋友2颗糖果,以此类推。当给完最后一个小朋友n颗糖果后,再从第一个小朋友开始,给他n + 1颗糖果,给第二个小朋友n + 2颗糖果,以此类推,直到没有糖果为止。注意:最后一次给糖果时可能不是给前一个人的糖果数 + 1,而是给完前一个人后剩下的糖果数。读完这段话后就会发现这道题是一个比较典型的模拟题,只需要将描述翻译为代码即可。

小技巧

对于一个循环索引i从0循环到n,可以这样写:

if (++i == n) {i = 0;
}

这样写的代码会多一些,以下这种方式使得代码更简洁,但是此时的i如果循环太多次就会超出int的范围:

i % n; // 使用索引时就写出该算式
i++;

代码

class Solution {public int[] distributeCandies(int candies, int num_people) {int[] res = new int[num_people];int i = 0;while (candies > 0) {res[i % num_people] += Math.min(candies, i + 1);candies -= Math.min(candies, ++i);}return res;}
}

121. 买卖股票的最佳时机

题目链接

121. 买卖股票的最佳时机

标签

数组、动态规划

思路

题目要得到购买并售卖各一次股票的最大利润,所以只需要找到卖股票前的最小股价即可,但卖股票的日子不是一个固定值,它从第二天开始,向后不断迭代,直到结束。如果股票的价格涨了,就更新max值;否则就更新最小股价。

代码

class Solution {public int maxProfit(int[] prices) {int in = 0, out = 1;int max = 0;while (out < prices.length) {int profit = prices[out] - prices[in];if (profit > 0) { // 股票涨了max = Math.max(profit, max);} else { // 股票跌了in = out;}out++;}return max;}
}

42. 接雨水

题目链接

42. 接雨水

标签

栈、数组、双指针、动态规划、单调栈

思路

本题采用的算法是动态规划,从左到右遍历所有使用一个存储一些柱子的索引,若当前的柱子比中间的柱子高,就弹出中间的柱子(如果对中间的柱子很疑惑,可以先看下一段),然后看是否有左柱子,如果有左柱子,则让结果数加上能接到的雨水。
为什么会有中间的柱子?因为两个紧挨的柱子无法接到雨水,若想要两个不紧挨柱子能够接到雨水,则需要在这两个柱子中间放置更低的柱子,由此可得出:两个柱子间能够接到雨水的必要条件为两个柱子必须不紧挨并且在中间还有更低的柱子
设左、中间、右柱子的索引分别为i, j, k、高度分别为 h i , h j , h k h_i, h_j, h_k hi,hj,hk,计算能接到的雨水有两个需要注意的点,公式为 r a i n = ( k − i − 1 ) ∗ ( m i n ( h i , h k ) − h j ) rain = (k - i - 1) * (min(h_i, h_k) - h_j) rain=(ki1)(min(hi,hk)hj),第一个注意的点是长度为 k − i − 1 k - i - 1 ki1而不是 k − i + 1 k - i + 1 ki+1,第二个需要注意的点是长度乘的不是高度,而是高度差 m i n ( h i , h k ) − h j min(h_i, h_k) - h_j min(hi,hk)hj

代码

class Solution {public int trap(int[] height) {int res = 0;LinkedList<Integer> stack = new LinkedList<>();for (int i = 0; i < height.length; i++) {int right = i; // 这里的right完全可以不定义,只是为了可读性,将所有出现right的地方替换为i即可while (!stack.isEmpty() && height[stack.peek()] < height[right]) {int center = stack.pop();Integer left = stack.peek();if (left != null) {res += (right - left - 1) * (Math.min(height[left], height[right]) - height[center]);}}stack.push(right);}return res;}
}

题解中使用了二分法,耗时更短,可以用短板效应来理解这种解法:接到的雨水由矮柱子决定

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

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

相关文章

Linux QT和OpenCV冲突

qt.qpa.plugin: Could not load the Qt platform plugin “xcb” in “$HOME/venv/lib/python3.8/site-packages/cv2/qt/plugins” even though it was found. This application failed to start because no Qt platform plugin could be initialized. Reinstalling the applic…

贪心,CF802B. Heidi and Library

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 Problem - 802A - Codeforces 二、解题报告 1、思路分析 这个题相当于你有一个容量为K的Cache&#xff0c;然后给你一系列访存序列 当访问缺失时你不得不替换掉Cache中某些块 学过操作系统都很熟悉页面置…

anaconda怎么运行python

一、在Anaconda Navigator中运行 首先点击菜单栏中的“开始”&#xff0c;在搜索栏中输入“Anaconda”&#xff0c;然后选择“Anaconda Navigator”。 进入主界面&#xff0c;点击“Spyder”中的“Launch”即可。 然后按F5键运行即可。 二、在Anaconda Prompt中运行 也可以在…

Linux - 高级IO

目录 理解五种IO模型非阻塞IO的设置多路转接之select 实现一个简易的select服务器select服务器的优缺点 多路转接之poll 实现一个简易的poll服务器poll服务器的优缺点 多路转接之epoll epoll原理epoll的优势用epoll实现一个简易的echo服务器 epoll的LT和ET工作模式 什么是LT和…

PasteSpider之阿里云OSS功能的设计初衷

前言 在版本v24.6.2.1之后&#xff0c;有一个菜单"OSS配置"&#xff0c;这个配置是干嘛用的呢&#xff1f; 阿里云OSS&#xff0c;或者说云盘&#xff0c;我觉得也可以当CDN使用&#xff0c;比如我们部署了一个网站&#xff0c;为了减少服务器的承载&#xff0c;可以…

数据结构汇总

等同于&#xff1a; 旋转的时候忽略Nil,选装完再加上。

线性数据结构-链表

链表&#xff1a;线性数据结构&#xff08;一维数组结构&#xff09; 线性的数据结构强调存储和顺序 单向链表&#xff08;也称为单链表&#xff09;是一种简单的数据结构&#xff0c;其中每个节点包含两个部分&#xff1a;一个是数据元素&#xff08;或称为值&#xff09;&am…

好用的linux链接工具

工具下载链接&#xff1a; FinalShell SSH工具,服务器管理,远程桌面加速软件,支持Windows,macOS,Linux,版本4.3.10,更新日期2023.12.31 - FinalShell官网FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发,运维需求.特色功…

引领未来,ArmSoM-Sige5震撼发布:RK3576芯片搭载,多媒体应用新宠

在数字化浪潮的推动下&#xff0c;ArmSoM-Sige5携手Rockchip RK3576第二代8纳米高性能AIOT平台&#xff0c;以颠覆性的性能和多功能性&#xff0c;成为多媒体应用的新宠儿。这一全新产品不仅拥有6 TOPS算力NPU和最大可配16GB大内存&#xff0c;更支持4K视频编解码&#xff0c;具…

Simulink从0搭建模型10-P11 建模练习 搭建简易车辆动力学模型

Simulink从0搭建模型10-P11 建模练习 搭建简易车辆动力学模型 前言参考1. 车辆纵向动力学模型2. 相关参数定义3. 车辆动力学模型搭建&#xff08;简易&#xff09;3.1. 思路3.2. 模型解析3.2.1. 输入扭矩3.2.2. 滚动阻力 Ff 部分3.2.3. 坡度阻力 Fi 部分3.2.4. 加速阻力 Fj 部分…

2024年比较火的桌面便利贴,适合懒人的电脑便签

在2024年的数字化生活中&#xff0c;高效的电脑便签软件成为了许多“懒人”提升生产力的秘密武器。这些软件不仅让信息记录变得轻松快捷&#xff0c;还能帮助用户有效管理时间&#xff0c;减少遗忘&#xff0c;让桌面保持整洁有序。 其中&#xff0c;“好用便签”以简洁的设计…

哈希重要思想续——布隆过滤器

布隆过滤器 一 概念1.1布隆过滤器的提出2.概念 二 模拟实现2.1 三个仿函数setTest 全代码三 实际应用 一 概念 1.1布隆过滤器的提出 我们在使用新闻客户端看新闻时&#xff0c;它会给我们不停地推荐新的内容&#xff0c;它每次推荐时要去重&#xff0c;去掉那些已经看过的内容…

【数学】填不同的自然数 1/9=1/()+1/()+1/()+1/()+1/()

填不同的自然数 1 9 1 ( ) 1 ( ) 1 ( ) 1 ( ) 1 ( ) \frac{1}{9}\frac{1}{(\text{ })}\frac{1}{(\text{ })}\frac{1}{(\text{ })}\frac{1}{(\text{ })}\frac{1}{(\text{ })} 91​( )1​( )1​( )1​( )1​( )1​ 推理&#xff1a; 1 1 − 1 2 1 2 − 1 3 1 3 … − 1…

springboot管理的各依赖版本查看

找一个springboot相关的依赖&#xff0c;比如这里我找mybatis 鼠标点击artifactId名称&#xff0c;图中蓝色字段&#xff0c;跳转到springboot依赖&#xff08;鼠标悬停在上面变成蓝色表示可点击跳转&#xff09;&#xff0c; 点击spring-boot-dependencites&#xff0c;跳转到…

python用tanh画图

用tanh函数画图 圆形 import numpy as np import matplotlib.pyplot as plt# 创建一个二维网格 xx np.linspace(-1, 1, 1000) yy np.linspace(-1, 1, 1000) x_i, y_i np.meshgrid(xx, yy)# 圆的半径和中心 r 0.4 center_x, center_y 0, 0 # 假设圆心在(0, 0)# 计算每个网…

pandas添加行

方法1(df.append()) import pandas as pd# 创建一个空的DataFrame df pd.DataFrame(columns[Column1, Column2])# 新增一行数据 data {Column1: Value1, Column2: Value2} df df.append(data, ignore_indexTrue) print(df)raw_data {"Column1":"adafafa&quo…

探究JSON和XML:两种常见的数据交换格式之异同

在软件开发和数据交换领域&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;和XML&#xff08;eXtensible Markup Language&#xff09;是两种广泛使用的数据交换格式。它们都具有将数据结构化并在不同系统之间进行传输和解析的能力&#xff0c;但在实际应用…

详解redis配置文件

华子目录 基础配置查看配置文件位置启动redis时&#xff0c;指定加载的配置文件示例 include引用其他配置文件units单位大小写不敏感network网络配置bind配置方式示例 protected-mode功能概述默认值配置方法安全建议总结 porttcp-backlog1. 定义2. 默认值3. 优化建议4. 注意事项…

OpenEuler 的安装过程记录

一、下载openEuler镜像 1.2 打开官网&#xff0c;选择openEuler23.09 1.3 选择架构、场景以及软件包类型 初次使用的话基本上都是先安装虚拟机&#xff0c;我们大部分主机都是x86_64架构&#xff0c;场景的话就选服务器&#xff0c;软件版类型选择标准版&#xff0c;可以安装图…

【稳定检索/投稿优惠】2024年环境、资源与区域经济发展国际会议(ERRED 2024)

2024 International Conference on Environment, Resources and Regional Economic Development 2024年环境、资源与区域经济发展国际会议 【会议信息】 会议简称&#xff1a;ERRED 2024 大会地点&#xff1a;中国杭州 会议官网&#xff1a;www.icerred.com 会议邮箱&#xff1…