AI刷题中题目思路分析与所得知识 | 豆包MarsCode AI刷题

49 阅读3分钟

刷题笔记

小U的数字插入问题:

对于数字插入某一位置进行大小比较,对于c语言,可以先用sscanf将整形数字转化为字符串

image.png 先初始化最大值为将数字插入到最前面的情况

image.png 之后进行for循环,将数字插入到对应字符串的每个位置,每次循环进行与之前设置好的最大值进行比较并更新最大值

image.png 之后返回最大值

思路:将数字转化为字符型在每个位置插入进行比较
心得:如何拼接的思路最开始没有想到,可以用strncpy对复制字符数量进行限制,实现中间插入的算法
知识总结:上图所示的temp[i] = ‘\0’原理是为了确保temp在拼接之前是一个有效的C字符串,C字符串必须以空字符\0结尾,这样标准库函数(如strcat)才能正确处理它。如果不加temp[i] = '\0',strcat将无法判断temp的结束位置,可能会导致未定义行为。

超市里的货物架调整:

算法思路:统计某一字符(如特定字母)出现次数,可以用下标索引将对应位置的数量加一,如图,定位相应位置可以采用s[i] – ‘a’的方式

image.png 计算出仓库里每个字母的数量后,对用户对各个字母的需求进行计算

image.png 还是用相同的方法找到顾客需求字母对应的索引,不过又再次定义了一个新的整型变量customer_demand,用来存放相同字母在用户所有需求中的出现次数,之后对比库存中该字母的出现的次数和用户需求量,选择更小的值作为售出量,最后清空该字母的库存

计算x到y的最小步数:

我认为这是一道主要用数学思维来解决的算法题

image.png

思路:如图所示,该题其实只要对步数和的区间进行锁定即可

比如 1 2 1 、1 2 2 1 、1 2 3 2 1 、1 2 3 3 2 1 ….

只要锁定步数所在区间并在不断增加的循环中相应的增加步数,在循环结束时,就能输出那时相应的步数

首先对于0 1 2 3特殊情况特殊处理,之后对于d > 3的情况

当t(t为步数)为奇数时,说明中间要再重复一次,所以需要再加一次跨越步数大小,并对t加一,当t为偶数时,说明中间两项相同,边要更新步长

对于为何是小于d-2,这是将首末的两个1减去,相应的,在返回值处要对t加数,但是在每次的循环判断时t多加了一个步数,其中一步分给d-2,消去两步中的一步,而首末两项占两步,还需要一步,则return t + 1

总结:这样的算法思路避免了对所有可能的步数情况相加的判断,只需要进行能达到的t的可能中计算相应的最大步数,并定位区间