首页 > 其他分享 >好题分享、心路历程(力扣1661)

好题分享、心路历程(力扣1661)

时间:2022-12-17 00:11:24浏览次数:54  
标签:machine end timestamp sum 好题 力扣 start 心路历程 id

又来到了【好题分享】专栏~

这次博主要分享的,是既力扣1179之后的姊妹题。

只能用几个字来描述:旧瓶换新酒,如出一辙!

【题目介绍】

该题为力扣1661,名为每台机器的进程平均运行时间。

emmm 虽然名字有点土,但丝毫不影响我们肝它~

【题型分类】

属于 case when 专题。

官网标为简单题,考虑到计算复杂程度,个人认为难度应为中等题~

【思路分享】

方法一:case when

其实本质和它的姊妹题是一样的,都会出现单纯 case when 之后同类数据分散在不同记录的尴尬问题。

不过没关系,group by 及 sum() 帮我们解决它~

# 新建列:
with tmp as
(select machine_id,process_id,
    case when activity_type='start' then timestamp end as start_timestamp,
    case when activity_type='end' then timestamp end as end_timestamp
from Activity)

# 聚合:
,tmp1 as
(select machine_id,process_id,
    sum(start_timestamp) as sum_start_timestamp,
    sum(end_timestamp) as sum_end_timestamp,
    (sum(end_timestamp)-sum(start_timestamp)) as processing_timestamp
from tmp
group by machine_id,process_id)

# 取平均:
select machine_id,
    round(avg(processing_timestamp),3) as processing_time 
from tmp1
group by machine_id

方法二:lag

事实上方法二才是博主我的第一反应,毕竟 lag 这些东西我玩得66的(bushi)~

这次不偷懒,上完整代码~

# 新增列:
with tmp as
(select *,
    lag(timestamp,1,0) over
        (partition by machine_id,process_id 
        order by activity_type) as start_timestamp
from Activity)

# 过滤:
,tmp1 as
(select machine_id,process_id,
    timestamp as end_timestamp,
    start_timestamp,
    timestamp-start_timestamp as processing_timestamp
from tmp
where activity_type='end')

# 取平均:
select machine_id,
    round(avg(processing_timestamp),3) as processing_time
from tmp1
group by machine_id

-END

https://leetcode.cn/problems/average-time-of-process-per-machine/

标签:machine,end,timestamp,sum,好题,力扣,start,心路历程,id
From: https://www.cnblogs.com/peitongshi/p/16988529.html

相关文章

  • 力扣---918. 环形子数组的最大和
    给定一个长度为n的环形整数数组 nums ,返回 nums 的非空子数组的最大可能和 。环形数组 意味着数组的末端将会与开头相连呈环状。形式上,nums[i]的下一个元素是......
  • 好题分享_力扣1179
    前阵子想开个专栏,叫【hard题分享】。既然今天发现了好题,心血来潮,就叫【好题分享】吧。不过仅分享思路,原因竟然是博主懒得code了。。。【题目介绍】该题为力扣1179题,名......
  • 力扣---53. 最大子数组和
    给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。示例1:输入:nums=[-2,1,-3,4,-1,2,1,-......
  • 「贪心」构成特定和需要添加的最少元素(力扣第1785题)
    本题为12月16日力扣每日一题题目来源:力扣第1785题题目tag:贪心题面题目描述给你一个整数数组nums,和两个整数limit与goal。数组nums有一条重要属性:abs(nums[i])<=......
  • 力扣---45. 跳跃游戏 II
    给定一个长度为n的0索引整数数组nums。初始位置为nums[0]。每个元素nums[i]表示从索引i向前跳转的最大长度。换句话说,如果你在nums[i]处,你可以跳转到任意nums......
  • 力扣---55. 跳跃游戏
    给定一个非负整数数组 nums,你最初位于数组的第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例 1:输入:nums=[......
  • 「模拟」字符串转化后的各位数字之和(力扣第1945题)
    本题为12月6日力扣每日一题题目来源:力扣第1945题题目tag:模拟题面题目描述给你一个由小写字母组成的字符串s,以及一个整数k。首先,用字母在字母表中的位置替换该字......
  • 力扣每日一题2022.12.15---1945. 字符串转化后的各位数字之和
    给你一个由小写字母组成的字符串s,以及一个整数k。首先,用字母在字母表中的位置替换该字母,将s转化为一个整数(也就是,'a'用1替换,'b'用2替换,...'z'用26替换)。......
  • 力扣---740. 删除并获得点数
    给你一个整数数组 nums ,你可以对它进行一些操作。每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除所有等于 nums[i]-1和nums[i......
  • 力扣---213. 打家劫舍 II
    你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互......