第十一届蓝桥杯 字串排序 我的错误的猜想【自我总结用】

本文探讨了一种解决问题的思路,利用冒泡排序和贪心策略,通过枚举后缀字母种类数来构造字符串,以达到在给定逆序对限制下尽可能消除逆序对。核心算法涉及双节点结构和逆序对计算。然而,作者意识到算法存在优化空间,尤其是在处理前缀逆序对上。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路+码一共约45分种,最终得分七十分,我知道自己错在哪,好像不怎么能改得了,但混混分应该还行,先占个坑写写思路吧。

首先我的思路基础,一是冒泡排序进行一次交换代表消去一个逆序对。输入的v代表要消去的逆序对的个数。

二是由于贪心思想,我们优先选取字典序低的字母。

三是我看用例猜测,bbaa、ccbbaa,这种连续两个的应该是要尽量多【当然看了下别人好像三个也行,猜测光荣阵亡。但这点可以看看能不能完善】

在以上的思路基础下,

于是认为,结果字符串应该是类似于那样的结构,再加上fghj这种之后的字母排成的前缀。

例如输入为100时的字符串

jihgfeeddccbbaa

观察字符串,可得所需逆序对数量v=前缀逆序对数+后缀逆序对数+后缀字母数量*前缀字母数量。

其中前缀指的是前面的乱七八糟部分,后缀指的是成对出现的数字。

而由于这样的字符串其实由后缀决定,所以我选择枚举后缀所拥有的字母种类数,最终取得最小值。

所以我们首先任务就是以字母种数创造后缀字符串数组,记录每种字母种类数的值。【仔细想,这里似乎不需要创建数组,之后实时算不知道行不行?】

对于后缀的字符串,我选用了抽象的定义和创造方法。

以”aa“、”bbaa“这种为一个doubleNode,包含它内部的逆序对数和它所拥有的字母数。并且doubleNode数列内部满足递推公式。

这里其实可以根据n的数据范围优化array的大小。这地方还没写。

typedef struct doubleNode{
	int eleNum
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值