荆州网站seo赣州网站建设需要多少钱
2026/4/3 0:02:10 网站建设 项目流程
荆州网站seo,赣州网站建设需要多少钱,山东省德州禹城住房建设厅网站,网站开发公司tahmwlkj文章目录 摘要描述约束信息很关键 题解答案#xff08;核心思路#xff09;关键拆分思路整体策略 题解答案#xff08;Swift 可运行 Demo#xff09;题解代码分析1. 为什么要用字典#xff1f;2. 第一阶段#xff1a;构建和的“频率表”3. 第二阶段#xff1a;查补数并累…文章目录摘要描述约束信息很关键题解答案核心思路关键拆分思路整体策略题解答案Swift 可运行 Demo题解代码分析1. 为什么要用字典2. 第一阶段构建和的“频率表”3. 第二阶段查补数并累加4. 为什么这样不会漏算或重复算示例测试及结果示例 1示例 2自定义测试实际场景结合1. 多条件组合统计2. 典型的“中间结果缓存”3. 面试中的信号题时间复杂度空间复杂度总结摘要LeetCode 454 是一道非常典型的“用空间换时间”的题。如果你第一次看这道题很容易写出一个四重循环然后立刻发现完了直接超时。但这题真正考的不是暴力而是你能不能意识到一件事四个数的和为 0其实可以拆成两部分的和互相抵消。一旦你从A B C D 0转成(A B) -(C D)这道题的复杂度立刻从“不可做”变成了“非常稳”。描述题目给了你四个长度相同的整数数组nums1nums2nums3nums4要求你统计有多少个四元组(i, j, k, l)满足nums1[i] nums2[j] nums3[k] nums4[l] 0约束信息很关键每个数组长度n 200数值范围是[-2^28, 2^28]这意味着什么四重循环是O(n^4)最大是200^4根本跑不完必须降到O(n^2)级别题解答案核心思路关键拆分思路把四个数组拆成两组第一组nums1nums2第二组nums3nums4目标条件a b c d 0等价于(a b) -(c d)整体策略枚举nums1和nums2的所有和记录每个和出现的次数枚举nums3和nums4的所有和对于每个(c d)查表看有没有-(c d)累加出现次数这一步的本质是把四数问题降维成两个“两数之和”的问题。题解答案Swift 可运行 DemoclassSolution{funcfourSumCount(_nums1:[Int],_nums2:[Int],_nums3:[Int],_nums4:[Int])-Int{varsumMap:[Int:Int][:]// 1. 统计 nums1 nums2 的所有可能和forainnums1{forbinnums2{letsumab sumMap[sum,default:0]1}}varresult0// 2. 枚举 nums3 nums4寻找补数forcinnums3{fordinnums4{lettarget-(cd)ifletcountsumMap[target]{resultcount}}}returnresult}}题解代码分析1. 为什么要用字典varsumMap:[Int:Int][:]这里的字 considered 是keynums1[i] nums2[j]value这个和出现的次数因为同一个和可能来自不同下标组合每一种组合都要算进答案2. 第一阶段构建和的“频率表”forainnums1{forbinnums2{letsumab sumMap[sum,default:0]1}}这一段做的事情很单纯枚举所有(i, j)把a b当成一个“中间结果”缓存起来这一步的复杂度是O(n²)3. 第二阶段查补数并累加lettarget-(cd)ifletcountsumMap[target]{resultcount}这里非常关键的一点是不是1而是count原因是可能有多个(a, b)对应同一个sum每一种都能和当前(c, d)组成一个合法四元组4. 为什么这样不会漏算或重复算因为(a, b)只在第一阶段统计(c, d)只在第二阶段枚举每个合法组合刚好被计算一次示例测试及结果示例 1letsolutionSolution()letnums1[1,2]letnums2[-2,-1]letnums3[-1,2]letnums4[0,2]print(solution.fourSumCount(nums1,nums2,nums3,nums4))输出2示例 2print(solution.fourSumCount([0],[0],[0],[0]))输出1自定义测试print(solution.fourSumCount([1,-1],[-1,1],[0],[0]))逻辑上(1 -1) (0 0) 0 (-1 1) (0 0) 0输出2实际场景结合这道题的思想在真实业务里非常常见。1. 多条件组合统计比如用户行为 A用户行为 B用户行为 C用户行为 D你想统计满足某个组合约束的用户数量直接全量组合几乎一定炸。2. 典型的“中间结果缓存”把复杂问题拆成两半把一半的结果预先算好并缓存用另一半去查表这是很多高性能系统的基本套路。3. 面试中的信号题这道题非常适合用来区分只会写暴力的人能主动做复杂度分析、拆问题的人时间复杂度构建哈希表O(n²)查找补数O(n²)总时间复杂度O(n²)空间复杂度哈希表最多存n²个键值对空间复杂度O(n²)总结LeetCode 454 的关键不在代码有多复杂而在于你是否能意识到四数问题 ≠ 四重循环拆分 哈希表是最稳的解法如果你在刷题或写博客时能把这道题讲清楚基本就已经说明你不只是“会写题解”而是真的理解了算法设计背后的思维方式。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询