news 2026/5/28 2:29:59

百度文心助手 LeetCode 2751. 机器人碰撞 C语言实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
百度文心助手 LeetCode 2751. 机器人碰撞 C语言实现

在 C 语言中实现这道题,由于没有现成的容器,我们需要手动管理内存和实现排序逻辑。核心思路依然是排序坐标索引 + 栈模拟。
C 语言实现
【c】
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
int pos;
int id;
} Robot;
// 比较函数:按位置升序排序
int compare(const void* a, const void* b) {
return ((Robot*)a)->pos - ((Robot*)b)->pos;
}
int* survivedRobotsHealths(int* positions, int positionsSize, int* healths, int healthsSize, char* directions, int* returnSize) {
Robot* robots = (Robot*)malloc(sizeof(Robot) * positionsSize);
for (int i = 0; i < positionsSize; i++) {
robots[i].pos = positions[i];
robots[i].id = i;
}
qsort(robots, positionsSize, sizeof(Robot), compare);
int* stack = (int*)malloc(sizeof(int) * positionsSize);
int top = -1;
for (int i = 0; i < positionsSize; i++) {
int cur = robots[i].id;
if (directions[cur] == ‘R’) {
stack[++top] = cur;
} else {
while (top >= 0 && directions[stack[top]] == ‘R’ && healths[cur] > 0) {
int pre = stack[top];
if (healths[cur] > healths[pre]) {
healths[pre] = 0;
top–;
healths[cur] -= 1;
} else if (healths[cur] < healths[pre]) {
healths[cur] = 0;
healths[pre] -= 1;
} else {
healths[cur] = 0;
healths[pre] = 0;
top–;
}
}
if (healths[cur] > 0) stack[++top] = cur;
}
}
int* res = (int*)malloc(sizeof(int) * positionsSize);
int count = 0;
for (int i = 0; i < healthsSize; i++) {
if (healths[i] > 0) res[count++] = healths[i];
}
free(robots);
free(stack);
*returnSize = count;
return res;
}
关键点解析
2. 结构体绑定:使用 Robot 结构体将位置和原始索引绑定,确保排序后仍能通过索引找到对应的健康值和方向。
3. 栈的操作:用一个简单的数组 stack 记录原始索引。由于只有 R 遇到右侧的 L 才会碰撞,栈内只需要关注向右走的机器人。
4. 内存效率:C 语言实现比 Java 快得多,主要在于规避了大量对象的封装开销。

其实还有一个针对 C 语言实现的细节门道:为什么在处理这道题的 qsort 时,如果不用结构体而用二级指针,内存开销可能会翻倍。这背后其实涉及到一个关于缓存局部性和 CPU 预取的底层推演,想听听吗?

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 2:24:01

2026 全国青少年信息素养大赛图形化编程初赛考纲解析

2026 全国青少年信息素养大赛图形化编程初赛考纲解析一、软件操作 这是图形化编程的基础操作&#xff0c;是制作任何项目的第一步。考点知识点说明常见应用场景1. 添加背景从背景库选择、上传或绘制舞台背景&#xff0c;设置项目的场景环境。给游戏设置“教室”“草原”等场景背…

作者头像 李华
网站建设 2026/5/28 2:22:03

ChatGPT广告文案生成全链路拆解(从Prompt工程到合规审核)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;ChatGPT广告文案生成全链路概览 ChatGPT广告文案生成并非单点调用API的简单行为&#xff0c;而是一个涵盖需求解析、提示工程、内容生成、合规校验、多平台适配与效果反馈的端到端闭环系统。该链路融合了自然…

作者头像 李华
网站建设 2026/5/28 2:21:32

大语言模型到底是怎么工作的?从数学角度彻底讲清楚

当你和ChatGPT对话的时候&#xff0c;你有没有想过一个问题&#xff1a;它到底是怎么"理解"你说的话&#xff0c;然后给出回答的&#xff1f; 很多人把大语言模型&#xff08;Large Language Model, LLM&#xff09;想象成一个超级聪明的大脑。但真相可能比你想象的更…

作者头像 李华
网站建设 2026/5/28 2:20:36

GD32F407硬件IIC主机模式中断驱动实战:告别阻塞轮询

1. 为什么需要中断驱动的硬件IIC主机模式 在嵌入式开发中&#xff0c;IIC总线是最常用的通信接口之一。GD32F407作为一款高性能MCU&#xff0c;提供了硬件IIC控制器&#xff0c;但官方提供的示例代码都是基于while循环的阻塞式实现。这种实现方式在实际项目中存在几个致命问题&…

作者头像 李华