上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 15 下一页
摘要: 要分成两个子集,且它们的和相等 那么我们可以从原数组的总和中得到这两个子集的和是多少 进而问题转成能不能从数组中选取元素使得它们的总和恰好是这个子集和 也就是 01背包问题 class Solution { public: bool canPartition(vector<int>& a) { in 阅读全文
posted @ 2026-03-26 22:08 rdcamelot 阅读(19) 评论(0) 推荐(0)
摘要: 首先这题的路径是限制了从一个节点到它子节点这样的简单路径,而不是一般的例如树的直径的那种形式 比较容易想到的就是自底向上传递信息,或者就是说 dfs 先获取左子树和右子树的信息,然后计算答案 进而考虑我们需要什么信息,因为路径是简单链,所以就是子树那条链上的值的后缀和,每一轮向上传递,实际就是在子节 阅读全文
posted @ 2026-03-26 20:59 rdcamelot 阅读(22) 评论(0) 推荐(0)
摘要: 异位词就是长度相同的字符串中各个字母的出现次数相同 因为 p 的长度是固定的 而且 s 的长度是 \(3*10^4\) ,因此不妨直接遍历 s 的起点,判断从它开始的子串是否满足我们的要求,O(n) 是可以接受的 每次移动,相应把对应字符删除/增加到计数器中 class Solution { pub 阅读全文
posted @ 2026-03-26 15:23 rdcamelot 阅读(20) 评论(0) 推荐(0)
摘要: 直接的做法比较显然 主要是学习下这里的原地修改策略,即空间复杂度 O(1) https://leetcode.cn/problems/find-all-numbers-disappeared-in-an-array/solutions/601946/zhao-dao-suo-you-shu-zu-z 阅读全文
posted @ 2026-03-26 14:39 rdcamelot 阅读(16) 评论(0) 推荐(0)
摘要: 异或得到二进制上不同的数 接着用 popcount 数这个数二进制中的 1 的个数 class Solution { public: int hammingDistance(int x, int y) { x ^= y; return __builtin_popcount(x); } }; 阅读全文
posted @ 2026-03-26 14:26 rdcamelot 阅读(13) 评论(0) 推荐(0)
摘要: 紧接着前一题零钱,这里能看出来也是 DP ,因为我们要求方案数 区别就在于这里的每个元素只能使用一次 先从结果出发,我们是要求 target 的方案数是多少 那么状态就是设计成 dp[i] 表示表达式是 i 的方案数是多少 接着枚举每个元素,因为是可加可减,所以 ndp[i] = dp[i - a[ 阅读全文
posted @ 2026-03-26 14:08 rdcamelot 阅读(18) 评论(0) 推荐(0)
摘要: 背包问题 实际上依然是从 dp 的角度来考虑 令 dp[i] 表示达到 i 的最小花费 那么考虑 dp[i] 怎么来,那当然是遍历 dp[i - j],取最小值 +1 1 <= coins.length <= 12 很小,所以每次都直接遍历即可 硬币取无限次就在于每一轮的更新中了,以为比如 3 = 阅读全文
posted @ 2026-03-26 00:40 rdcamelot 阅读(18) 评论(0) 推荐(0)
摘要: 感觉就是树dp 树的自相似结构天然适合 dp 这种形式 dp[i] 表示以 i 为根节点的子树中的最大路径 考虑转移,那么就是 dp[i] = max 子节点 + a[i] 同时维护下答案,因为路径可以是通过 i 这个根节点,这样转折一次得到比较长的路径 /** * Definition for a 阅读全文
posted @ 2026-03-24 00:42 rdcamelot 阅读(9) 评论(0) 推荐(0)
摘要: 因为时间复杂度是 O(n) ,所以不能排序后做 相当于只能遍历数组 那么想遍历的时候我们能做什么 那不就是相当于枚举当前元素作为起点的话连续序列的长度是多少吗 如果每个都这样去判断,那么首先,我们需要一个哈希表去 O(1) 的查询这个元素是否在数组中,接着,复杂度是类似于 \(O(n^2)\) 的 阅读全文
posted @ 2026-03-23 23:07 rdcamelot 阅读(24) 评论(0) 推荐(0)
摘要: 想到使用 manacher 先放代码,板子来自蒋老师,https://www.cnblogs.com/WIDA/p/17633758.html#马拉车manacher std::vector<int> manacher(std::string s) { std::string t = "#"; fo 阅读全文
posted @ 2026-03-22 22:13 rdcamelot 阅读(19) 评论(0) 推荐(0)
上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 15 下一页