- 博客(200)
- 收藏
- 关注
原创 SQL刷题---2021年11月每天新用户的次日留存率
3.以表a为主与表b进行连接,过滤条件为同一个用户在表b中的日期比表a中日期多一天,根据此结果计算留存率。1.首先算出每个新用户注册的日期,将其命名为表a。2.计算出每个用户登录的天数,将其命名为表b。
2024-04-16 18:33:25
684
1
原创 LeetCode刷题---销售分析III
首先找出在sales表中筛选出符合指定日期的prioduct_id,将其查询结果命名为t1。与product表进行关联得出最终结果。
2024-04-01 15:18:37
192
原创 LeetCode刷题---游戏玩法分析 IV
2.将Expected表和原始表activity进行关联,求出首次登录后第二天又登录的player_id,将其创建为临时表,命名为result。3.将从Result表中查询出来的用户个数除以原表activity中用户的个数,结果保留两位小数。1.首先查询出每个用户首次登录的第二天,并将其创建为临时表,命名为Expected。
2024-03-27 16:04:03
430
原创 LeetCode刷题---即时食物配送 II
2.与原表连接,求出在用户首次订单表中即时订单的数量的总和。1.首先先求出每个用户首次订单表,将其命名为表t。3.求出每个用户首次订单的数量。4.计算得到最终结果。
2024-03-12 22:31:31
379
原创 LeetCode刷题---路径总和
是一种用于遍历或搜索树或图的算法。在搜索开始时,首先将根节点放入队列中。然后,在每一步中,算法都会检查队列中的第一个节点,并访问其所有尚未访问过的邻居节点。这些邻居节点随后被添加到队列的末尾。然后,算法从队列中删除当前节点,并继续处理队列中的下一个节点。
2024-03-12 16:19:25
356
原创 LeetCode刷题---每月交易I
当state不等于approved时,将state赋值为NULL或0。对分组后的结果求解,使用IF函数进行过滤。1.在对日期截取时,使用了MySQL中的。首先按照日期和国家/地区进行分组。函数,将日期转换为指定格式的日期。2.该题配合MySQL中的。
2024-03-11 20:56:55
605
2
原创 LeetCode刷题---二叉树展开为链表
如果存在左节点,创建辅助节点指向左节点,判断左节点是否有右节点,如果有右节点,则将辅助节点指向右节点,此时进行拼接操作,即将辅助节点的右节点指向当前节点的右节点,当前节点cur的右节点指向当前节点的左节点,且当前节点的左节点指向为Null。判断当前节点是否有左节点,如果不存在左节点,则当前节点向右移一位。结束上述步骤之后,当前节点向右移一位,之后开始重新执行上述步骤。当根节点不为空时,从二叉树根节点开始遍历。
2024-03-07 18:58:19
378
原创 LeetCode刷题---填充每个节点的下一个右侧节点指针 II
如果cur.left不为空时,pre的next节点为cur.left,之后pre指针前进,同理,当cur.right不为空的时候,pre的next指针为cur.right,之后pre前进,最后当前节点cur前进。如果cur前进后为空,则表示需要开始遍历下一层,cur指向dummy的next节点,如果cur仍为空,则循环结束,返回根节点,如果cur不为空,则表示cur已经指向了下一层的第一个节点处,开始该层的遍历。创建辅助指针pre,pre初始指向dummy,之后通过pre来填充当前层的next节点。
2024-03-07 00:57:44
565
1
原创 LeetCode刷题---填充每个节点的下一个右侧节点指针
如图所示,值为2的节点的左子节点的next节点为其右子节点,此时判断2的节点的next节点是否为NULL,如果不为NULL,值为2的节点的next节点为值为3的节点,且值为2的节点的右子节点的next节点为值为3的节点的左子节点。如果值为2的节点的next节点为NULL,则从其下一层的最左边的节点开始重新遍历。因为根节点的next节点为NULL,开始从根节点的下一层的最左边的节点开始遍历。从根节点开始,根节点的左子节点的next节点就指向根节点的右子节点。可以根据每一层来依次遍历。
2024-03-06 22:43:13
417
原创 LeetCode刷题---查询结果的质量和占比
对组内的rating的值使用IF函数进行判断,如果rating=3,则将其标识为0,通过次方法可以找出组内rating的值小于
2024-02-27 22:39:19
384
原创 LeetCode刷题---各赛事的用户注册率
3.最后将上一步求出的count数量除以第一步得出的count数量得出注册率,并按照题中要求对结果进行排序。2.按照contest_id进行分组,求出每个赛事有多少用户参赛。根据题意要求出每个赛事的注册率,首先就要确定有多少参赛用户。
2024-02-27 15:23:58
418
原创 LeetCode刷题---平均售价
首先对Prices表和UnitsSold表进行Left join操作,之后按照购买日期位于定价开始和结束日期之间的条件进行过滤。将price和units的乘积进行累加,将units的值进行累加,之后将两个累加的和相除得到最终结果。按照product_id进行分组,对组内进行计算。
2024-02-27 10:08:15
367
原创 LeetCode刷题---确认率
AVG(c.action=‘confirmed’)表示对action列进行求平均,如果action=‘confirmed’,则返回true,此时在AVG函数中,将其计数为1,如果为false,则将其计数为0.将Signups和Confirmations进行左连接,连接的条件为Signups.user_id=Confirmations.user_id。但是对于值为null的行,AVG在进行计算的时候,则会将其忽略,所以此时使用IFNULL函数将其null值改为0.
2024-02-26 23:38:43
371
原创 LeetCode刷题---从中序与后序遍历序列构造二叉树
传入参数中,左子树在中序遍历中的起始索引为中序遍历中第一个数的索引,终止索引为根节点midRoot-1,左子树在后序遍历中的起始索引为后序遍历中第一个数的索引,终止索引为起始索引+左子树的节点个数(通过中序遍历中根节点的索引-1-中序遍历中左子树的起始索引得出)。传入参数中,右子树在中序遍历中的起始索引为midRoot+1,终止索引为midRight,在后序遍历中的起始索引为左子树在后序遍历中的终止索引+1,终止索引为lastRoot-1。后序遍历中最后一个数为二叉树的根节点。
2024-02-26 22:58:46
480
原创 LeetCode刷题---从前序与中序遍历序列构造二叉树
递归创建右子树,传入参数为先序和中序遍历数组,右子树的起始节点索引=根节点在中序遍历数组中的索引+1和右子树的终止节点索引(首次传入右子树的终止节点索引为数组长度n-1)创建递归方法buildTreeNew(先序遍历数组,中序遍历数组,左子树的起始节点,左子树终止节点索引,右子树的起始节点,右子树终止节点索引)其中左子树的终止索引可以根据 根节点在先序遍历数组中的索引(首次传入为0)+左子树节点的个数=左子树终止节点的索引。首先根据先序遍历找出二叉树的根节点,先序遍历的起始索引为根节点的索引。
2024-02-26 21:02:03
667
原创 LeetCode刷题---至少有5名直接下属的经理
首先将原表(经理表manager)与自身(下属表emp)进行连接,连接条件为manager.id=emp.manager,之后按经理表中的id进行分组,统计每个经理的下属员工的个数,将统计的结果命名为表t1。从t1中取出count>=5的经理id,将查询的结果命名为表t2。找出Employee表中下属员工至少有5个的经理名称。
2024-02-22 17:39:57
361
原创 LeetCode刷题---对称二叉树
4.分别递归遍历左子树的左子树和右子树的右子树是否对称,左子树的右子树和右子树的左子树是否对称,如果都对称,则返回true。3.如果左节点的值和右节点的值不相等时,返回false。2.如果左节点和右节点只有一个为空时,返回false。首先对二叉树进行判空,如果根节点为空,则返回true。1.如果左节点和右节点同时为空,则返回true。接下来对当前节点的左节点和右节点进行判断。
2024-02-22 16:13:46
319
原创 LeetCode刷题---反转二叉树
创建临时节点,将右节点赋值给临时节点,将左节点赋值给右节点,再将临时节点赋值给左节点。对二叉树进行反转,如果根节点为空,则返回。
2024-02-22 15:02:36
388
原创 LeetCode刷题---相同的树
找出递归结束条件,如果两个树满足条件一个树或者其子树为空,而另一个树或者其子树不为空,两个树或者其子树的值不等,则返回false。使用递归的方法对两个树进行判断,如果两个的树的根或者其左子树和右子树的值都相等,则返回true。首先对两个树进行空值判断,如果两个树都为空,则返回true。
2024-02-21 10:59:55
407
原创 LeetCode刷题---LRU缓存
如果哈希表中已经存储该节点,则需要对该节点的数据进行更新,首先根据key从哈希表中取出该节点,再对节点中的value重新赋值,之后根据LRU算法将该节点从链表中删除,再添加到链表表头的位置。在写put方法的时候,如果哈希表中未存储该节点,则创建一个新的节点,节点中key和value分别为要添加的键和值,之后将key和新创建的节点添加到哈希表中,在将新的节点添加到链表头部。在写get方法来获取某节点的时候,如果哈希表中存储了该节点,根据LRU算法,则先将该节点删除,再将该节点添加到链表中。
2024-02-21 09:40:45
1827
原创 SparkStreaming---DStream
用户自定义数据源需要继承 Receiver,并实现 onStart、onStop 方法来自定义数据源采集。//最初启动的时候,调用该方法,读数据并将数据发送给 Sparkreceive()}.start()///读数据并将数据发送给 Spark//创建Socket//创建变量用于接收端口穿过来的数据//创建BufferedReader用于读取端口传来的数据//读取数据//当 receiver 没有关闭并且输入数据不为空while(!= null){//循环发送数据给 Spark。
2024-02-01 09:50:33
1163
原创 SparkStreaming---入门
流处理和批处理是两种不同的数据处理方式,它们在处理数据的方式和特点上有所不同。流处理(Stream Processing)是一种数据处理方式,它实时地处理数据流,即将源源不断的数据按照特定的规则进行实时处理。批处理(Batch Processing)是一种数据处理方式,它将一段时间内的数据收集起来,然后一次性地进行处理。
2024-01-31 15:59:02
1079
原创 LeetCode刷题---二叉树的最大深度
如果有子节点,则先将当前节点的左节点作为参数传入方法中,之后在将当前节点的右节点作为参数传入方法中。使用先序遍历的方法来找出二叉树的最大深度,即先访问根节点,在访问左节点,之后是右节点。对于任意一个节点,其深度为其左子树深度和右子树深度的最大值加1。二叉树的最大深度是从根节点到最远叶子节点的最长路径上的节点数。首先判断当前节点是否还有子节点,如果没有则结束递归,返回0。最大高度是从根节点到最远叶子节点的最长路径的长度。最后对取出的左右节点深度的最大值+1返回即可。使用递归的方法来解决该题。
2024-01-27 10:19:00
421
原创 LeetCode刷题---学生们参加各科测试的次数
之后将学生表和科目表的笛卡尔积与grouped表进行左外连接,连接条件为学生id和科目(这样保证在学生id不在考试表中的学生也可以被统计上),结果按照学生id,姓名,科目,进行分组。对考试表Examinations表统计学生参加考试的次数,按照学生id和考试科目进行分组,使用count函数统计次数,起别名为grouped表。根据题意要实现每个学生参加每个科目考试的次数,如果没有参加,则统计次数为0。首先将学生表和科目表进行笛卡尔积。
2024-01-26 16:11:50
398
原创 LeetCode刷题---每台机器的进程平均运行时间
使用case—when函数修改,如果状态为start,则将其时间值变为负数,如果状态为end,则保持不变。先按照机器machine_id进行分组,然后求每台机器内的平均运行时间。使用sum函数对同一台机器内所有进程的运行时间进行求和。使用上一步的累加值除以同一台机器内进程的个数得到平均值。
2024-01-25 23:27:54
361
原创 LeetCode刷题---分隔链表
此时将right指向节点的下一个节点指向空,right指向节点即为合并后链表的尾节点,left的下一个节点指向r初始节点的下一个节点。如果当前节点的val值大于等于x,right指向节点的下一个节点为当前节点cur,right前进一个节点。如果当前节点的val值小于x,left指向节点的下一个节点为当前节点cur,left前进一个节点。创建链表r用来表示大于等于给定值x的链表,创建辅助链表right指向r的初始节点。创建链表l用来表示小于给定值x的链表,创建辅助链表left指向l的初始节点。
2024-01-25 22:43:06
412
原创 LeetCode刷题---旋转链表
首先创建辅助节点cur遍历指向链表最后一个节点,并将cur的下一个节点指向head头节点,形成闭环,并且在遍历的过程中计算链表的长度n。n-k表示当前节点(当前节点指向未反转节点的最后一个节点)到反转后的链表的最后一个节点的位置。当cur前进了n-k个节点后,即cur已经走到了反转后链表的最后一个节点。再创建一个新的节点指向反转后链表的头节点,再将cur的下一个节点指向空。为了防止k>n的情况,需要对n-k的结果对n求余。
2024-01-25 21:45:29
495
原创 LeetCode刷题---删除排序链表中的重复元素 II
4.如果当前节点cur的下一个节点和下下一个节点的val值相等,则删除cur的下一个节点,使得cur的下一个节点指向cur的下下个节点。3.开始遍历链表,如果当前节点cur的下一个节点和下下一个节点都不为空的情况下,对cur的下一个节点和下下一个节点的值进行判断。5.重复第4步,直至cur的下一个节点和下下一个节点的val值不相等,此时cur节点前进。1.首先定义虚拟节点dummy,dummy的下一个节点指向head节点。2.定义辅助节点cur指向dummy节点。
2024-01-24 22:49:15
471
2
原创 SparkSql---RDD DataFrame DataSet
DataSet 是 Spark 1.6 中添加的一个新抽象,是 DataFrame的一个扩展。它提供了 RDD 的优势(强类型,使用强大的 lambda 函数的能力)以及 SparkSQL 优化执行引擎的优点。DataFrame 与 RDD 的主要区别在于,RDD只关心数据,而DataFrame中也包含数据描述信息(数据的元数据)。DataFrame 其实就是 DataSet 的一个特例 ,因为DataFrame中每行的类型都是Row。定义一个名为user的json文件,文件中的数据如下。
2024-01-24 09:50:01
1717
原创 LeetCode刷题---最长交替子数组
如果上述条件不符合,对快指针进行判断,如果nums[fast]等于nums[fast-1]+1,则slow=fast,如果nums[fast]不等于nums[fast-1]+1,则slow=fast-1。根据题意得如果快指针的索引为奇数,则nums[fast]=nums[slow]+1,偶数则,nums[fast]==nums[slow]快指针继续向前遍历,每次都与之前长度比较,取最大值。遍历快指针从1遍历到nums.length-1。首先慢指针指向0,快指针指向1。该题使用双指针的思想来解决。
2024-01-23 14:59:12
360
原创 LeetCode刷题---删除链表的倒数第 n 个结点
首先让快指针fast先到第n+1个节点,然后fast指针和slow指针一起走,知道fast指针指向空。让slow指针的下一个节点指向slow指针的下一个节点的下一个节点来删除倒数第n个节点。定义快指针fast,慢指针slow,链表中删除第n个节点的前提是要找第n+1个节点。此时slow指针指向了倒数第n个节点的前一个节点,执行删除操作。使用双指针的思想来解决该题。
2024-01-23 09:30:25
544
原创 LeetCode刷题---反转链表II
next:永远指向 curr 的下一个节点,循环过程中,curr 变化以后 next 会变化;pre:永远指向待反转区域的第一个节点 left 的前一个节点,在循环过程中不变。在需要反转的区间里,每遍历到一个节点,让这个新节点来到反转部分的起始位置。执行操作 ①:把 curr 的下一个节点指向 next 的下一个节点;执行操作 ②:把next 的下一个节点指向 pre 的下一个节点;执行操作 ③:把 pre 的下一个节点指向 next。先将 curr 的下一个节点记录为 next;使用了三指针的思想。
2024-01-16 16:09:56
435
原创 LeetCode刷题---反转链表
此时pre节点前进到cur节点,cur节点前进到tmp节点,直至cur节点为空,此时pre节点为头节点。开始遍历链表,创建临时节点tmp指向cur的下一个节点,之后将cur的下一个节点指向pre节点。首先定义pre指针,初始化为空,和cur指针,初始化为头节点。使用双指针+临时指针的方法来解决该问题。将pre节点返回即可。
2024-01-16 14:49:22
389
原创 LeetCode刷题---随机链表的复制
开始遍历原链表,遍历到每个节点的时候,就去查哈希表,取出新链表的节点,将原链表当前节点的next和random节点都复制到新链表的节点中去。首先对原链表遍历,将原链表每个节点和新链表每个节点形成对应关系,存入到哈希表中,key为原链表的节点,value为新链表的节点。之后重置辅助链表指向原链表头节点。使用哈希表来解决该问题。因为题中要求是深拷贝。
2024-01-16 14:36:35
439
原创 LeetCode刷题---基本计算器
如果当前字符为数字字符,判断当前字符的下一个字符是否也是数字字符,如果下一个字符也是数字字符,需要将其和之后的数字字符都转换为int类型再进行合并,直至下一个字符不为数字字符为止。如果当前字符为左括号,则将当前结果集推入栈中,并重置当前结果集为0,将当前符号位推入栈中,并重置当前符号位。如果当前字符为右括号,则将当前结果集与取出的第一个栈顶元素(符号位)相乘再与存入的结果集相加。如果当前字符为运算符,则更新符号位sign(加操作sign=1,减操作sign=-1)根据题意,字符串中包含的运算符只有+和-
2024-01-15 16:09:26
523
原创 LeetCode刷题---逆波兰表达式求值
首先定义一个栈Stack,接着对tokens数组进行遍历,如果当前元素是非数字字符串的话(运算符),就从栈中取出两个元素根据该运算符进行计算,将计算后的结果添加到栈中。如果当前元素是数字字符串,直接将其添加到栈中。
2024-01-15 15:47:35
706
原创 Spark---累加器和广播变量
用户可以通过继承AccumulatorV2来自定义累加器。需求:自定义累加器实现WordCount案例。AccumulatorV2[IN,OUT]中:IN:输入数据的类型OUT:输出数据类型/*** 使用累加器完成WordCount案例*///建立与Spark框架的连接val wordCount = new SparkConf().setMaster("local").setAppName("WordCount") //配置文件。
2024-01-13 17:37:27
781
原创 Spark---RDD持久化
但是,在实际使用的时候,如果想重用数据,仍然建议调用persist 或 cache。但是并不是这两个方法被调用时立即缓存,而是触发后面的 action 算子时,该 RDD 将会被缓存在计算节点的内存中,并供后面重用。在Spark中,持久化是将RDD存储在内存中,以便在多次计算之间重复使用。可以看出将中间结果放入缓存中后,第二次使用中间结果的时候,将不会从头再执行一遍,而是直接从缓存中读取数据,,在reduceByKey使用完成之后,groupByKey想要再次使用的时候,
2024-01-12 16:29:35
941
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人