2026/4/22 0:20:58
网站建设
项目流程
大帮手网站建设,智能自助建站网站,类似天书奇谈的网页游戏,wordpress 控制台 慢lc2505遍历数组累加前缀和#xff0c;不断将当前数和前缀和与结果做或运算最终得到所有子序列和的或值算所有子序列和的或值#xff0c;只需看每个二进制位是否能被“激活”#xff1a;子序列和的任意二进制位为1#xff0c;必然对应1.“单个元素”2.或“某个前缀和”的该位…lc2505遍历数组累加前缀和不断将当前数和前缀和与结果做或运算最终得到所有子序列和的或值算所有子序列和的或值只需看每个二进制位是否能被“激活”子序列和的任意二进制位为1必然对应1.“单个元素”2.或“某个前缀和”的该位为1前缀和覆盖了所有长于1的子序列和的位贡献可能class Solution {public:long long subsequenceSumOr(vectorint nums) {long long sumOr 0, prefixSum 0;for (int num : nums) {prefixSum num;sumOr | num;sumOr | prefixSum;}return sumOr;}};lc2083class Solution {typedef long long ll;public:long long numberOfSubstrings(string s) {ll ret0;unordered_mapchar,int hash;for(auto c:s)hash[c];for(auto [a,b]:hash){retb*(ll)(b1)/2;}return ret;}};lc1072hash把每行转化为“与首元素(基准的异或模式串”统计出现次数最多的模式其次数就是可得到的最多相等行数class Solution {public:int maxEqualRowsAfterFlips(vectorvectorint matrix) {int ans 0, n matrix[0].size();unordered_mapstring, int cnt;for (auto row: matrix) {string r(n, 0);for (int j 0; j n; j)r[j] row[j] ^ row[0]; // 翻转第一个数为 1 的行ans max(ans, cnt[r]);}return ans;}};喵喵优化vectorbool 替代字符串存模式更省内存因为 vectorbool 是比特级存储加 move(t) 避免vector拷贝直接转移内存所有权逻辑上通过“首元素为1时翻转整行”统一模式统计重复最多的模式数——本质是把“可通过列翻转变成相同的行”归为同一类次数最多的类就是答案。class Solution {public:int maxEqualRowsAfterFlips(const vectorvectorint matrix) {unordered_mapvectorbool, int cnt;int ans 0;for (const auto e : matrix) {vectorbool t(e.begin(), e.end());if (e[0]) t.flip();ans max(ans, cnt[move(t)]);}return ans;}};lc2128与行首异或记录每行状态微调 true即同模式class Solution {public:bool removeOnes(vectorvectorint grid){int n grid[0].size();unordered_mapstring, int hash;for (auto row: grid) {string r(n, 0);for (int j 0; j n; j)r[j] row[j] ^ row[0];hash[r];}return hash.size()1;}};