尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

考核算法题纠错

考核算法题纠错
📅 发布时间:2026/6/18 13:51:54

考核题算法题纠错

打家劫舍

introb(int*nums,intnumsSize){if(numsSize==0)return0;if(numsSize==1)returnnums[0];intprev_prev=nums[0];intprev=nums[0]>nums[1]?nums[0]:nums[1];for(inti=2;i<numsSize;++i){intcurrent=prev>(prev_prev+nums[i])?prev:(prev_prev+nums[i]);prev_prev=prev;prev=current;}returnprev;}

本题主要用的是动态规划
逻辑:偷第 i 间房:不能偷第 i-1 间,总金额 = 第 i 间金额 + 前 i-2 间的最大金额
不偷第 i 间房:总金额 = 前 i-1 间的最大金额
取两者最大值,即为前 i 间房的最大金额
步骤一:定义两个变量prev_prev为前i-2间房的最大金额,prev为前i-1间房的的最大金额
步骤二:状态转移方程:
遍历到第 i 间房时,当前最大金额:current = max(不偷当前房:prev, 偷当前房:prev_prev + nums[i])
步骤三:初始化:
无房屋(numsSize=0):返回 0
仅 1 间房屋(numsSize=1):返回 nums[0]
仅 2 间房屋(numsSize=2):返回 max(nums[0], nums[1])(初始化 prev_prev 和 prev)
步骤四:迭代计算:
从第 3 间房(i=2)开始遍历,每轮计算后更prev_prev 和 prev:
prev_prev = 原来的prev(旧的 i-1 变为新的 i-2
prev = current(当前 i 的最优解变为新的 i-1)
遍历结束后,prev 即为所有房屋的最大金额。

合并k个升序链表

structListNode*mergeTwoLists(structListNode*l1,structListNode*l2){if(l1==NULL)returnl2;if(l2==NULL)returnl1;structListNodedummy;structListNode*tail=&dummy;while(l1!=NULL&&l2!=NULL){if(l1->val<l2->val){tail->next=l1;l1=l1->next;}else{tail->next=l2;l2=l2->next;}tail=tail->next;}tail->next=(l1!=NULL)?l1:l2;returndummy.next;}structListNode*merge(structListNode**lists,intleft,intright){if(left>right)returnNULL;if(left==right)returnlists[left];intmid=left+(right-left)/2;structListNode*leftMerge=merge(lists,left,mid);structListNode*rightMerge=merge(lists,mid+1,right);returnmergeTwoLists(leftMerge,rightMerge);}structListNode*mergeKLists(structListNode**lists,intlistsSize){if(listsSize==0)returnNULL;returnmerge(lists,0,listsSize-1);}

逻辑:

  1. 拆分:将k个链表的数组从中间分成左右两部分,递归合并成左半部分和右半部分
  2. 合并:递归的终止条件是拆分到只剩0/1个链表(直接返回),或2个链表

关键步骤:

  1. 辅助函数:mergeTwoLists(合并两个升序链表)
    作用:负责合并两个有序链表;
    逻辑:用虚拟头节点 dummy 遍历两个链表,每次取较小的节点接入结果,最后拼接剩余节点。
  2. 递归核心:merge 函数
    lists 是链表数组,left/right 是当前处理的数组区间
    终止条件:left > right:空区间,返回 NULL;
    left == right:区间内只有 1 个链表,直接返回该链表
    递归:计算中间点 mid,将区间拆分为 [left, mid] 和 [mid+1, right],分别递归合并
    向上合并:将左右两个子区间合并的结果,再调用 mergeTwoLists 合并为一个链表
  3. 主函数:mergeKLists
    处理边界(空数组)后,调用 merge 函数,初始区间是 [0, listsSize-1](整个数组)。

二叉树的前序遍历

int*preorderTraversal(structTreeNode*root,int*returnSize){if(root==NULL){*returnSize=0;returnNULL;}structTreeNode*stack[10000];intstackTop=0;stack[stackTop++]=root;int*result=(int*)malloc(sizeof(int)*10000);intidx=0;while(stackTop>0){structTreeNode*curr=stack[--stackTop];result[idx++]=curr->val;if(curr->right!=NULL){stack[stackTop++]=curr->right;}if(curr->left!=NULL){stack[stackTop++]=curr->left;}}*returnSize=idx;returnresult;}

逻辑:前序遍历的顺序是 根节点 → 左子树 → 右子树,利用栈的 “后进先出” 特性实现

  1. 根节点入栈
  2. 出栈并记录值
  3. 子树入栈
  4. 循环直到栈空:

步骤:

  1. 初始栈化
  2. 初始化结果数组
  3. 栈循环处理(右子树先入栈左子树后入栈)
  4. 设置返回数组大小

相关新闻

  • 手把手教你学Simulink——电机数字孪生/通信/可持续场景示例:基于Simulink的电机可持续设计仿真
  • 记录一下n8n docker安装方法
  • AI编程:Trae CN用户规则和项目规则定义分享

最新新闻

  • 2026 安徽哪所学校护理升学强?5大高升学率中职招生名单 - 小途xt
  • NXP DPAA硬件加速实战:报文头操作与CAAM加密引擎配置详解
  • 2026年论文写作AI工具怎么用?豆包等工具详细使用教程 - 掌桥科研-AI论文写作
  • 2026滁州家长注意!离南京这么近,孩子学建筑去这所公办中职,比在南京打工强 - 我叫小周
  • 50行Python实现人脸检测:OpenCV+Haar级联原理与实战
  • 2026重庆高端珠宝首饰回收排行 权威鉴定实测靠谱商家榜单 - 名奢变现站

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号