首页 > 其他分享 >【LeetCode 571. 给定数字的频率查询中位数】WITH RECURSIVE实现Tally的逆操作

【LeetCode 571. 给定数字的频率查询中位数】WITH RECURSIVE实现Tally的逆操作

时间:2023-08-15 20:12:14浏览次数:47  
标签:571 Tally num frequency select c1 total LeetCode SELECT

目录

题目地址

https://leetcode.cn/problems/find-median-given-frequency-of-numbers/description/

代码

WITH RECURSIVE RecCTE AS (
    SELECT num, frequency - 1 as remaining_frequency
    FROM Numbers
    WHERE frequency > 0
    UNION ALL
    SELECT num, remaining_frequency - 1
    FROM RecCTE
    WHERE remaining_frequency > 0
)

, Ordered AS (
    SELECT num,
           ROW_NUMBER() OVER(ORDER BY num) AS rownum,
           COUNT(*) OVER() AS total_count
    FROM RecCTE
)

SELECT 
    CASE 
        WHEN total_count % 2 = 1 THEN 
            num
        ELSE
            AVG(num) OVER(ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING)
    END AS median
FROM Ordered
WHERE rownum IN (CEIL(total_count / 2), CEIL(total_count / 2) + 1)
LIMIT 1;

评论区大佬使用用户变量编程的解法

select avg(n) as median from 
(
    select Number as n, @c1 + 1 as 'c1', (@c1 := @c1 + Frequency) as 'c2', t2.s
    from Numbers, (select @c1 := 0) t1, (select sum(Frequency) as s
    from Numbers) t2
    order by n
) tmp
where c1 <= s/2 + 1 and c2 >= s/2

标签:571,Tally,num,frequency,select,c1,total,LeetCode,SELECT
From: https://www.cnblogs.com/yhm138/p/17632318.html

相关文章

  • Leetcode 206. 反转链表(Reverse linked list)
    题目链接给你单链表的头节点head,请你反转链表,并返回反转后的链表。示例1:输入:head=[1,2,3,4,5]输出:[5,4,3,2,1]示例2:输入:head=[1,2]输出:[2,1]提示:链表中节点的数目范围是[0,5000]-5000<=Node.val<=5000思路迭代法:创建两个指针,分别指向当前节......
  • LeetCode 198.打家劫舍
    1.题目:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜......
  • LeetCode 213.打家劫舍II
    1.题目:你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。给定一个代表每个房屋存......
  • [LeetCode] 2369. Check if There is a Valid Partition For The Array
    Youaregivena 0-indexed integerarray nums.Youhavetopartitionthearrayintooneormore contiguous subarrays.Wecallapartitionofthearray valid ifeachoftheobtainedsubarrayssatisfies one ofthefollowingconditions:Thesubarraycon......
  • LeetCode 139.单词拆分
    1.题目:给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 示例1:输入:s="leetcode",wordDict=["leet","code"]输出:true解释:返回tr......
  • LeetCode 7023操作使得分最大
    7023.操作使得分最大题目描述:一个数字的质数分数为其质因数个数;给定一个长度为\(n\)的正整数数组nums和正整数k,可以进行k次如下操作:选择一个之前没有选择过的非空子数组subnums从subnums中选择一个质数分数最大的元素x,如果多个元素质数分数相同且最大,选择下标最小的一个将得......
  • LeetCode 279.完全平方数
    1.题目:给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。 https://leetcode.cn/problems/perfect-squares/description/......
  • Leetcode No.53 Maximum Subarray
    参考资料:考点:子串&动态规划&[题干]Input:nums=[-2,1,-3,4,-1,2,1,-5,4]Output:6Explanation:Thesubarray[4,-1,2,1]hasthelargestsum6.1.心路历程这道题非常经典,蕴含的思想也是精巧无比。2.正解简单来说官解就是找到了题目中......
  • LeetCode 周赛上分之旅 #39 结合中心扩展的单调栈贪心问题
    ⭐️本文已收录到AndroidFamily,技术和职场问题,请关注公众号[彭旭锐]和BaguTreePro知识星球提问。学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度也更复杂。在这个专栏里,小彭与你分享每场LeetCode周赛的解题报告,一......
  • LeetCode 322.零钱兑换
    1.题目:给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。你可以认为每种硬币的数量是无限的。 https://leetcode.cn/problems/coin-change/示......