当前位置: 首页 > news >正文

7.28 进制交换|迭代器模式|map|子集按位或|带参递归

lc701.二叉搜索树插入

void dfs不行

TreeNode* dfs,带接受参数处理的dfs

当为空的时候,就可以添加插入

if (!root)

{

return new TreeNode(val);

}

插入位置

root->left = insertIntoBST(root->left, val);

class Solution {

public:

TreeNode* insertIntoBST(TreeNode* root, int val)

{

// 若根节点为空,直接创建新节点作为根

if (!root)

{

return new TreeNode(val);

}

// 根据值的大小决定插入左子树还是右子树

if (val < root->val)

{

root->left = insertIntoBST(root->left, val);

}

else

{

root->right = insertIntoBST(root->right, val);

}

return root;

}

};

联想:

有序合并两个链表

l1->next=merge(l1->next,l2);

return l1;

lc61.链表分割点

class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
if(!head || !head->next)
return head;


int n=0;
ListNode* tmp=head;
while(tmp)
{
n++;
tmp=tmp->next;
}

k=k%n;
if(k==0) return head;

ListNode* cy=head;
int flag=n-k;
int cnt=0;
ListNode* a;
ListNode* b;
while(head)
{
cnt++;

if(cnt==flag)
{
a=head;
b=head->next;
break;
}

head=head->next;
}

a->next=nullptr;
ListNode* newhead=b;

while(b->next)
{
b=b->next;
}
b->next=cy;

return newhead;
}
};

迭代器

对比于for循环

for循环一般是以特定顺序循环,迭代器是以特定遍历规则去访问集合中每个元素,不严谨地来说,可以认为for的概念范围比迭代器小,参考 迭代器模式

不能用for循环遍历一个 红黑树 或hash链表之类,迭代器是对所有可遍历数据结构的抽象和封装。


map

在C++中, std::map 是有序集合,其内部通过红黑树实现,会按照键(key)的升序自动排序。

获取 std::map 最后一个元素的方法:

- 使用 rbegin() 函数,它返回指向最后一个元素的反向迭代器,例如:auto last = map.rbegin();
- 通过 *last 可访问该元素(键值对),通过 last->first 获取键,last->second 获取值。

lc82.链表删重

引入flag

return前处理:

newhead->next=nullptr; //截断尾部可能的残留


class Solution {
public:
ListNode* deleteDuplicates(ListNode* head)
{
if(!head || !head->next)
return head;

ListNode* newhead=new ListNode(0);
ListNode* ret=newhead;
int flag=-1000;

while(head)
{
if(head->next && head->val==head->next->val)
flag=head->val;

if(head->val!=flag)
{
newhead->next=head;
newhead=newhead->next;
}

head=head->next;
}


newhead->next=nullptr; //截断尾部可能的残留
return ret->next;
}
};


lc190 位运算

class Solution {
public:
uint32_t reverseBits(uint32_t n) {
uint32_t result = 0;
for (int i = 0; i < 32; ++i)
result = (result << 1) + (n >> i & 1);
return result;
}
};

lc2044.子集按位或

计算最大按位或的子集数量

class Solution {
public:
int countMaxOrSubsets(vector<int>& nums) {
int max_or = 0;
int count = 0;
int n = nums.size();

// 遍历所有子集(共2^n个)
for (int mask = 1; mask < (1 << n); ++mask) {
int current_or = 0;
for (int i = 0; i < n; ++i) {

if (mask & (1 << i)) {
current_or |= nums[i];
}
}


// 更新最大或值和计数
if (current_or > max_or)

{
max_or = current_or;
count = 1;
}

else if (current_or == max_or)

{
count++;
}
}
return count;
}
};


主要修改说明:

1.聚焦子集按位或计算
2. 使用位运算遍历所有非空子集(掩码 mask 从1开始,避免空集)
3. 计算每个子集的按位或值,追踪最大值并统计出现次数
4. 时间复杂度O(n·2ⁿ),适用于n≤20的场景(题目隐含约束)

http://www.jsqmd.com/news/447204/

相关文章:

  • Elasticsearch-SQL终极指南:如何用SQL轻松查询Elasticsearch日志数据
  • 扫码枪写入案例。关于js原生聚焦以及扫码枪原理
  • 中医药方剂大模型开发方案
  • Qt/C++运行报错:exited with code -1073741819
  • iOS分页标签栏终极性能优化:快速解决XLPagerTabStrip滚动卡顿问题
  • 基于新型群智能优化算法的BP神经网络初始权值与偏置优化
  • 科研智能体平台设计与实现:社科类研究支持系统
  • RT-Thread ESP-Hosted
  • durable_rules模式匹配技术:DFA编译如何实现纳秒级字符串处理
  • local-web-server性能优化指南:让你的开发服务器飞起来
  • Flutter响应式管理面板AI功能集成:智能分析与自动化操作终极指南
  • 生产车间班组长绩效考核方案优化与绩效提升策略
  • 记录踩过的坑-金蝶云·苍穹平台-页面开发
  • 自平衡摩托车控制系统设计:Python实现方案
  • Ease高级特性:动态更新targetValue实现实时动画轨迹调整
  • 如何用Jspreadsheet CE快速创建动态数据表格:从数组到JSON的实战指南
  • REINFORCE、Remax、GRPO、DR.GRPO、DAPO、REINFORCE++、GPG、OPO、GSPO、SAPO、CLIP-COV、VC-PPO、VAPO对比
  • 微信小程序单元测试与集成测试完整指南:从入门到实战
  • (算法题)N个数求和
  • Flutter响应式管理面板终极容器化部署指南:Docker与Kubernetes实践
  • Clojure-lsp完全指南:从安装到精通的10个核心步骤
  • 终极指南:5个BackstopJS测试报告定制技巧与品牌化实战
  • IDEA与Gradle构建冲突,导致java重复类的解决方案
  • 大型项目测试策略:BackstopJS 场景分组与模块化配置管理终极指南
  • BackstopJS 测试数据隐私保护终极指南:敏感信息屏蔽与测试环境隔离技巧
  • 揭秘Rust Search Extension工作原理:从输入到结果的毫秒级响应
  • 如何高效调试与监控DeepSearcher:日志系统完全指南
  • DeepSearcher+Ollama:本地部署大模型的终极推理方案
  • ntlm_theft源代码解析:Python实现哈希窃取文件生成的核心原理
  • 微信小程序开发完整指南:从组件到云开发的实战教程