news 2026/6/23 7:58:28

苏旭晖先生写的纯SQL求解Advent of Code 2025第9题 最大矩形面积 第2部分

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
苏旭晖先生写的纯SQL求解Advent of Code 2025第9题 最大矩形面积 第2部分

原贴地址,我把它改成了能在DuckDB运行,主要是把connect by level 改为 range函数

-- 去除match_recognize, 就是合并连续区间的老套路:withday9as(selectrow_number()over()id,t.*fromread_csv('2509-input.txt',header=0)t(x,y)),vas(selectday9.*,count(*)over()ascntfromday9),sas(----------轮廓线段selectd1.idassid,d1.cnt,casewhend1.x=d2.xthen'X'else'Y'endass_direction,casewhend1.x=d2.xthend1.xelsed1.yendass_val,casewhend1.x=d2.xthenleast(d1.y,d2.y)elseleast(d1.x,d2.x)endass_v1,casewhend1.x=d2.xthengreatest(d1.y,d2.y)elsegreatest(d1.x,d2.x)endass_v2fromv d1,v d2whered2.id=d1.id+1or(d2.id=1andd1.id=d2.cnt)),ssas(------------ s1 和 s2分别是轮廓线s在起点和终点折了一次之后再回到和s平行的另外两端轮廓线(所以sid会间隔)。----------- 如果S和S1(或S和S2)构成Z字形则,则方向没有改变,在和那个端点的垂直线相交时,两段只算一段(通过least使得这两段值一样,dense_rank()把它们分到一组)----------- 如果S和S1(或S和S2)构成U字形则,则方向改变,分别算做两段,所以各自保留自己的s_valselects.*,casewhens.s_v1in(s1.s_v1,s2.s_v1)thens.s_valwhens.s_v1=s1.s_v2thenleast(s.s_val,s1.s_val)whens.s_v1=s2.s_v2thenleast(s.s_val,s2.s_val)endass_val1----- 当s的v1端点落在垂直线上时,用这个代替s_val来排序,casewhens.s_v2in(s1.s_v2,s2.s_v2)thens.s_valwhens.s_v2=s1.s_v1thenleast(s.s_val,s1.s_val)whens.s_v2=s2.s_v1thenleast(s.s_val,s2.s_val)endass_val2----- 当s的v2端点落在垂直线上时,用这个代替s_val来排序froms,s s1,s s2wherecasewhens.sid>s.cnt-2thens.sid+2-s.cntelses.sid+2end=s1.sidandcasewhens.sid<3thens.sid-2+s.cntelses.sid-2end=s2.sid),e2as(selects_direction,s_val,s_v1,s_v2,CASEWHENs_v1<=MAX(s_v2)OVER(PARTITIONBYs_direction,s_valorderbys_v1,s_v2ROWSBETWEENUNBOUNDEDPRECEDINGAND1PRECEDING)+1then0else1endasflagfrom(selects_direction,s_val,min(val2)s_v1,max(val2)s_v2from(selecta.s_direction,a.s_val,ss.s_val val2,dense_rank()over(partitionbya.s_direction,a.s_valorderbycasea.s_valwhenss.s_v1thenss.s_val1whenss.s_v2thenss.s_val2elsess.s_valend)rnfrom(selectdistincts_direction,s_valfroms)ajoinssona.s_direction<>ss.s_directionanda.s_valbetweenss.s_v1andss.s_v2)groupbys_direction,s_val,ceil(rn/2)unionallselects_direction,s_val,s_v1,s_v2froms)),eas(select/*+ materialize */s_direction,s_val,min(s_v1)s_v1,max(s_v2)s_v2from(selecte2.*,sum(flag)over(partitionbys_direction,s_valorderbys_v1)grpfrome2)groupbys_direction,s_val,grp),ras(------- 找出所有矩形,并拆成四条边selectd1.x x1,d1.y y1,d2.x x2,d2.y y2,casewhennin(1,2)then'X'else'Y'endasr_direction,casenwhen1thenleast(d1.x,d2.x)when2thengreatest(d1.x,d2.x)when3thenleast(d1.y,d2.y)when4thengreatest(d1.y,d2.y)endasr_val,casewhennin(1,2)thenleast(d1.y,d2.y)elseleast(d1.x,d2.x)endasr_v1,casewhennin(1,2)thengreatest(d1.y,d2.y)elsegreatest(d1.x,d2.x)endasr_v2fromday9 d1,day9 d2,(selecti nfromrange(1,5)t(i))whered1.id<d2.idandd1.x<>d2.xandd1.y<>d2.y)select*from(selectx1,y1,x2,y2,(abs(x1-x2)+1)*(abs(y1-y2)+1)areafromrwhereexists(select1fromewherer.r_direction=e.s_directionandr.r_val=e.s_valandr.r_v1betweene.s_v1ande.s_v2andr.r_v2betweene.s_v1ande.s_v2)groupbyx1,y1,x2,y2havingcount(*)=4----- 四条边都在多边形内)orderbyareadesclimit1;-- fetch first row with ties;

这个版本比调用spatial插件的版本快了10倍。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 10:48:43

雷池 WAF vs React 高危漏洞:1 毫秒检测延迟,护住全栈业务安全

刚被 React 19/RSC 满分漏洞的预警刷屏&#xff1f;这次 CVSS 10.0 的高危漏洞&#xff0c;让 React 19.x、Next.js 14.3 等版本的业务瞬间暴露在‘单请求 RCE’的风险里&#xff0c;不少团队连夜紧急升级框架……在这个事件中&#xff0c;雷池 WAF 的社区官网&#xff0c;用的…

作者头像 李华
网站建设 2026/6/23 3:12:33

csp信奥赛C++标准模板库STL(3):list的使用详解

csp信奥赛C标准模板库STL&#xff08;3&#xff09;&#xff1a;list的使用详解 1. list基本概念 list是C标准模板库(STL)中的双向链表容器。与vector和deque不同&#xff0c;list不支持随机访问&#xff0c;但可以在任意位置快速插入和删除元素。 特点&#xff1a; 双向链表…

作者头像 李华
网站建设 2026/6/23 18:16:22

csp信奥赛C++标准模板库STL(2):deque的使用详解

csp信奥赛C标准模板库STL&#xff08;2&#xff09;&#xff1a;deque的使用详解 一、deque基本概念 1.1 什么是deque deque&#xff08;double-ended queue&#xff0c;双端队列&#xff09;是一种可以在两端进行高效插入和删除操作的序列容器结合了vector和list的优点&…

作者头像 李华
网站建设 2026/6/23 19:53:40

LobeChat部署在Docker中遇到的问题及解决办法总结

LobeChat 部署在 Docker 中的实战问题与深度解析 在构建 AI 聊天系统时&#xff0c;前端体验往往决定了用户是否愿意持续使用。即便底层模型再强大&#xff0c;一个卡顿、掉线或配置丢失的界面也会让用户迅速流失。LobeChat 作为近年来备受关注的开源聊天框架&#xff0c;凭借其…

作者头像 李华
网站建设 2026/6/23 19:46:06

AutoGPT在城市交通流量预测中的建模实验

AutoGPT在城市交通流量预测中的建模实验 在智慧城市的发展浪潮中&#xff0c;交通拥堵已成为制约城市运行效率的核心痛点。传统的交通流量预测系统往往依赖固定的建模流程&#xff1a;数据工程师手动采集数据、算法团队编写脚本清洗特征、模型训练后输出结果——整个过程耗时数…

作者头像 李华
网站建设 2026/6/23 19:52:52

AutoGPT镜像部署最佳实践:提升效率的关键一步

AutoGPT镜像部署最佳实践&#xff1a;提升效率的关键一步 在生成式AI迅猛发展的今天&#xff0c;我们正见证一个关键转折——大模型不再只是“回答问题的工具”&#xff0c;而是逐渐演变为能主动思考、规划并执行复杂任务的智能体。传统聊天机器人依赖用户逐条输入指令&#x…

作者头像 李华