T1:竖着读
给n个数字字符串,每个字符串长度都为m,然后按照每一列从上往下读构成m个字符串,求这m个排序后的字符串,排序输出。
直接按列存储,然后将其转换为long long
类型的值,排序即可,顺便解决了前导0问题
T2: 删除非质数下标后的最终元素
给一个数组,下标从1-n,每次淘汰下标非质数的数字,问最后剩下的一个数字是什么?
这里没想到暴力可以解决的,直接先把小于1e5
的所有质数筛出来,这里我用了质数筛,然后每次模拟删除即可。直至最后元素个数为1
T3:防御攻击最小距离
给一堆字符串代表一排士兵,士兵编号1~n,字符串中’0’的士兵代表进攻性的,‘1’的代表防御性的,每个士兵的攻击力或守备力为其下标值。将士兵分组,0~pos的是进攻组,只算攻击力,pos+1~n的是防御组,只算防御力。pos可以取0~n。求攻击组的攻击力和防御组的防御力的差的绝对值的最小值。
这里分别对攻击值做前缀,防御值做后缀,然后遍历下标即可,取最小即可
T4:构造链表
给一个链表数组,数组中的每个链表是一个循环链表中的破碎的部分,且每个链表结点的值唯一且为数值类型,求将这个循环链表复原以后,从链表中任意一个结点正序或逆序遍历 字典序 最小的那个链表,并返回。
思路:链表中结点的值唯一,使用字典记录结点的前驱和后继,并记录最小值,然后从最小值开始遍历,并判断最小值的前驱和后继哪个更小,从更小的开始顺序遍历。
主要分为4步骤,感觉为了出题者凑题意加入了一个链表的概念,其实把链表看成数组就好了。。。。
- 这里我们可以先用map来维护当前节点的值和下一节点的值的状态,
- 随便找一个切入点,通过map遍历所有元素存到一个数组,
- 找到数组中最小值,作为我们的头节点
- 判断头节点的前驱或者后继节点的值的大小
- 如果前驱小,那么逆序构造
- 如果后继小,那么顺序构造。
T5: 股票问题
股票问题进阶版本,没时间写了,最后判断了一下如果股票价格是逆序的,那么就输出初始资金,过20%
。
表示第i天拥有j支股票的现金金额
转移方程:
有思路的小伙伴可以评论区分享一下呀!
牛客上Java版本题解:题解