LeetCode 1327, 383, 236

目录

  • 1327. 列出指定时间段内所有的下单产品
    • 题目链接
    • 要求
    • 知识点
    • 思路
    • 代码
  • 383. 赎金信
    • 题目链接
    • 标签
    • 思路
    • 代码
  • 236. 二叉树的最近公共祖先
    • 题目链接
    • 标签
    • 思路
    • 代码

1327. 列出指定时间段内所有的下单产品

题目链接

1327. 列出指定时间段内所有的下单产品

  • Products的字段为product_idproduct_nameproduct_category
  • Orders的字段为product_idorder_dateunit

要求

写一个解决方案,要求获取在 2020 年 2 月份下单的数量不少于 100 的产品的名字和数目。

返回结果表单的 顺序无要求

知识点

  1. sum():求和的函数。
  2. group by:根据某些字段分组。
  3. having:对分组后的数据进行限制。

思路

要获取在 2020 年 2 月份下单的数量不少于 100 的产品的id,首先得统计出各产品在 2020 年 2 月份下单的数量num,将时间限制到2020-02-012020-02-29之间,根据产品id进行分组,对unit进行求和,获取要求中的下单数量num。然后将下单数量num与100进行比较,如果num比100大,则将其id和下单数量num返回。

查到满足要求的产品id后,与Products表进行多表查询,获取这些产品对应的名字。

代码

selectproduct_name,num unit
fromProducts p,(selectproduct_id,sum(unit) numfromOrderswhereorder_date between '2020-02-01' and '2020-02-29'group byproduct_idhavingnum >= 100) o
wherep.product_id = o.product_id

383. 赎金信

题目链接

383. 赎金信

标签

哈希表 字符串 计数

思路

判断 ransomNote 能不能由 magazine 里面的字符构成,并且 magazine 中的每个字符只能在 ransomNote 中使用一次。

magazine 中找构成 ransomNote 的字符,所以 magazine 就是源字符串 srcransomNote 就是目标字符串tar。以下使用 src 来代替 magazinetar代替 ransomNote

这种判断不需要关心字符的顺序,只需要关心 tar 里面的字符是否都能在 src 中找到,并且由于src 中的每个字符只能在 tar 中使用一次,所以 src 中每个字符的数量还不能少于 tar

使用两个int[]数组分别统计 tarsrc 中的字符出现次数的想法油然而生,由于题目中说明这两个字符串仅由小写字符构成,所以使用长度为26的int[]数组即可,并将小写字符通过ch - 'a'的计算映射出它在统计数组中的索引。

统计完两个字符串的字符出现次数后,进行比较,如果发现tar中某个字符的出现次数比src中该字符的出现次数多,则说明tar不能由src中的字符构成,返回false。如果比较完26个字符,则说明tar能由src中的字符构成,返回true

代码

class Solution {public boolean canConstruct(String ransomNote, String magazine) {int[] tarCnt = new int[26]; // 用于统计目标字符串中各个字符的出现次数int[] srcCnt = new int[26]; // 用于统计源字符串中各个字符的出现次数// 统计目标字符串中各个字符的出现次数for (char ch : ransomNote.toCharArray()) {tarCnt[ch - 'a']++;}// 统计源字符串中各个字符的出现次数for (char ch : magazine.toCharArray()) {srcCnt[ch - 'a']++;}// 对比 目标字符串 和 源字符串 的各个字符的出现情况for (int i = 0; i < 26; i++) { // 对于某一个字符if (srcCnt[i] < tarCnt[i]) { // 如果它 在源字符串中的出现次数 < 在目标字符串中的出现次数return false; // 则目标字符串不能由源字符串中的字符构成,返回false}}// 对比完26个字符后,发现 目标字符串 的字符够构成 源字符串,返回truereturn true;}
}

236. 二叉树的最近公共祖先

题目链接

236. 二叉树的最近公共祖先

标签

树 深度优先搜索 二叉树

思路

由于题目中提到"一个节点也可以是它自己的祖先“,所以二叉树的公共祖先有两种情况,例如对于以下这个二叉树:

二叉树

节点1和节点3的公共祖先为节点2
节点1和节点2的公共祖先为节点2

从而得出判断公共祖先的两类条件:当指定的两个节点p, q分别位于节点curr两侧(即p, q分别位于curr的左、右子树中)时,那么此时这个curr就是p, q的公共祖先;当指定的两个节点p, q有一个节点位于节点curr的子树中,并且另一个节点就是curr,此时的curr也是p, q的公共祖先。

注意:这两种情况提到的公共祖先不一定是最近的公共祖先,要想获得最近的公共祖先,需要遍历整颗二叉树。虽然不一定是最近的公共祖先,但是每次找到公共祖先时都会向最近的公共祖先逼近

代码

class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {dfs(root, p, q);return res;}private TreeNode res; // 公共祖先节点// 判断 在curr及其子树中 能否找到 p 或 q,顺便更新公共祖先节点private boolean dfs(TreeNode curr, TreeNode p, TreeNode q) {if (curr == null) { // 如果curr为nullreturn false; // 则找不到p或q,返回false}boolean left = dfs(curr.left, p, q); // 在左子树中寻找p或qboolean right = dfs(curr.right, p, q); // 在右子树中寻找p或qif (left && right) { // 如果p, q位于curr的两侧res = curr; // 说明当前节点curr为p和q的公共祖先} else if ((left || right) // 如果在左子树或右子树中能找到p或q&& (curr.val == p.val || curr.val == q.val)) { // 并且当前节点的值为p或q中的一个res = curr; // 说明当前节点curr为p和q的公共祖先}return left // 如果在左子树中能够找到p或q,则返回true|| right // 如果在右子树中能够找到p或q,则返回true|| (curr.val == p.val || curr.val == q.val); // 如果本节点就是要找的p或q,则返回true}
}

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

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

相关文章

matlab 干涉图仿真

目录 一、算法概述1、干涉图2、生成步骤 二、代码实现三、结果展示 本文由CSDN点云侠原创&#xff0c;原文链接。如果你不是在点云侠的博客中看到该文章&#xff0c;那么此处便是不要脸的爬虫。 一、算法概述 1、干涉图 干涉图是两束或多束相干光波相遇时&#xff0c;它们的振…

【软件测试】Selenium自动化测试框架 | 相关介绍 | Selenium + Java环境搭建 | 常用API的使用

文章目录 自动化测试一、selenium1.相关介绍1.Selenium IDE2.Webdriverwebdriver的工作原理&#xff1a; 3.selenium Grid 2.Selenium Java环境搭建3.常用API的使用1.定位元素2.操作测试对象3.添加等待4.打印信息5.浏览器的操作6.键盘事件7.鼠标事件8.定位一组元素9.多层框架定…

[笔记] 卷积03 - 运算的对称性 时域构建高通滤波器的失败尝试

1.卷积运算具备足够好的对称性 1.在计算卷积时&#xff0c;两个函数的位置是可以颠倒的&#xff0c;对吧&#xff1f; 在卷积运算中&#xff0c;确实可以对参与卷积的两个函数进行颠倒。这是因为卷积的定义是通过一个函数与另一个函数的翻转后的形式进行积分运算。具体来说&a…

DPDK概述

文章目录 1. DPDK概述1.1 DPDK 内存管理Mbuf单帧结构:1.2 DPDK内核驱动 igb_uio驱动1.3 DPDK源码下载方式1.4 pktgen源码下载方式1.5 DPDK相关名词解释 1. DPDK概述 Intel DPDK全称Intel Data Plane Development Kit&#xff0c;是Intel提供的数据平面开发工具集&#xff0c;为…

第十三章 Nest Middleware

在上一章我们了解到Nest 并不直接依赖Express 可以切换到别的http 请求处理库 创建项目&#xff1a; nest new middleware-test -p npm创建 middleware &#xff1a; nest g middleware test --no-spec --flat这时候可以看到 req 和 res 的类型都是为 any类型 所以并不知道使…

算法力扣刷题记录 二十八【225. 用队列实现栈】

前言 栈和队列篇。 记录 二十八【225. 用队列实现栈】 一、题目阅读 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 empty&#xff09;。 实现 MyStack 类&#xff1a; void p…

实验四 SQL的数据定义语句

题目 通过SQL语句创建名为ecommerce1的数据库&#xff1a;CREATE DATABASE ecommerce1 2、在数据库ecommerce1中练习模式的创建和删除语句&#xff08;如给用户li创建一个学生管理模式“S-T”&#xff09;&#xff08;需要先添加一个用户li&#xff09; 3、在数据库ecommerce1中…

7月4号直播预告 | 全国产EtherCAT运动控制器ZMC432HG及其EtherCAT总线使用

EtherCAT运动控制边缘控制器是工业互联网的关键组件之一&#xff0c;结合丰富的运动控制功能、实时数据采集、处理和本地计算等&#xff0c;具备高度灵活的可编程性和出色的运动控制性能&#xff0c;为运动控制协同工业互联网应用带来巨大市场潜力&#xff0c;同时也使其成为企…

ID3算法决策树

步骤&#xff1a; 先计算出信息量&#xff1b;信息熵&#xff1b;信息增量&#xff1b; 再比较信息增量的大小&#xff0c;确定分类依据。 信息量&#xff1a; 信息熵&#xff1a; 信息增益&#xff1a;

Postman使用教程

传统接口风格 RESTful风格 使用Postman完成测试用例目标&#xff1a; Postman教程 &#xff08;1&#xff09;准备工作&#xff0c;下载Postman新建 &#xff08;2&#xff09;登录接口调试-获取验证码 &#xff08;3&#xff09;登录接口调试-登录 &#xff08;4&#xff09;…

Mysql查询IFNULL和想象的不一样

select sum(ifnull(a,0)) aaa,ifnull(sum(a),0) bbb from (select g.goodsid a from goods g where g.goodsid 601 ) tmp #注意 goodsid 601 的不存在 ​​​ 返回的结果和想象中不同&#xff0c;解释如下 在您SQL查询中&#xff0c;创建了一个子查询&#xff08;别名为tmp&a…

Linux_管道通信

目录 一、匿名管道 1、介绍进程间通信 2、理解管道 3、管道通信 4、用户角度看匿名管道 5、内核角度看匿名管道 6、代码实现匿名管道 6.1 创建子进程 6.2 实现通信 7、匿名管道阻塞情况 8、匿名管道的读写原子性 二、命名管道 1、命名管道 1.1 命名管道通信 …

国内外大模型集合

为了满足日益增长的AI需求&#xff0c;我们精心打造了一站式大模型导航网站&#xff0c;旨在成为连接您与全球顶尖人工智能模型的桥梁。无论您是科研工作者、开发者还是对AI充满好奇的探索者&#xff0c;这里都有您所需。 国内大模型精选 通义千问 —— 阿里巴巴集团倾力打造…

某业帮六月校招后端笔试

题目一 解题思路 签到题&#xff0c;dp就行。 题目二 解题思路 这个比较烦人&#xff0c;需要处理额外的引号和括号。用DFS&#xff0c;对于每个间隙&#xff0c;插入与不插入都搜一遍。 题目三 解题思路&#xff1a; 双指针&#xff0c;左右各一个指针&#xff0c;对比长度&…

OpenLCA、GREET、R语言的生命周期评价方法、模型构建

原文链接&#xff1a;OpenLCA、GREET、R语言的生命周期评价方法、模型构建教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247608240&idx6&sn1b5758206d500399fe7cc69e800f61fe&chksmfa826657cdf5ef413d31557941a1c5db5cc84bba8d0f408c469e05a4118c…

#LinuxC高级 笔记一

linux命令 什么是嵌入式&#xff1f; 以应用为中心&#xff0c;以计算机技术为基础&#xff0c;软件硬件可裁剪&#xff0c;适用于对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统 计算机系统组成&#xff1f; 硬件、软件 操作系统&#xff1f; ios windows harmo…

k8s_集群搭建_k8s管理前端_dashboard安装部署---分布式云原生部署架构搭建017

然后再去安装一下一个dashboard,有了这个以后,操作k8s集群就不用 一直敲命令了 可以看到上面的命令拿过来,然后 执行就可以了 然后如果执行慢,可以直接先去下载,使用wget,然后再去 也可以在浏览器访问,把内容拿到,然后 下面是内容: # Copyright 2017 The Kubernetes Author…

登 Cell 子刊!清华大学张强锋课题组开发 SPACE 算法,组织模块发现能力领先同类工具

多细胞生物中的细胞尽管共享相同的基因组&#xff0c;但因其内部基因调控网络的差异以及与周围微环境中相邻细胞的外部信号交流&#xff0c;使得它们在形态、基因表达和功能上展现出显著的多样性。为了将细胞类型信息与其在组织内的空间位置相关联&#xff0c;空间转录组学 (Sp…

Vue86-Vuex中的getters属性

一、getters的使用 1-1、index.js中getters的书写 计算属性computed靠return获得返回值&#xff01; 1-2、组件中getters的调用 state是数据源&#xff0c;getters是拿着数据源里的东西进行一番加工。像极了&#xff1a;data和computed 二、小结

vue 启动项目报错Syntax Error: Error: PostCSS received undefined instead of CSS string

启动vue项目然后报错如下图 这个是跟node版本有关系 因为要开发不同的项目使用不同的node版本&#xff0c;所以就用nvm切换&#xff0c;所以导致了node-sass编译问题 执行这个命令就可以 npm install node-sass or npm rebuild node-sass node-sass对于node高版本和低版本切…