4.6 华为笔试 3题 2h 100分 200分 300分

商品库存系统

一道简单的模拟题,直接看例子吧

输入:

foo-100 bar-99 baz-999 Something-123 ‘-’前面是商品名称,后面是库存每个由空格隔开

4 表示订单数量

……每个订单的格式和上面的一样

输出:

最后输出库存余量,输出格式和上面相同,最后不是空格结尾 ps:如果订单中有商品名称不在库存中,或者某些库存剩余不足以满足订单需求,整个订单作废,不做处理

思路:ac 100% 太简单了,一步步来就行了。听说只要100分就能通过笔试,lucky

排列组合的回文字符串

给定一个字符串,长度[1,1000],返回通过排列组合后的所有可能回文字符串的个数(需要排除重复的组合),若无则返回

输入:

aabb

输出:

2

abba baab

输入:

abc

输出:

0

思路:75%

  1. 用字典统计所有字符出现的次数
  2. 然后根据字符串的长度奇偶,区分是ABA型还是ABBA型;如果是奇数长度,那么只能由一个字符数量是奇数;如果是偶数,那么所有的字符数量都是偶数。否则返回0
  3. 由于是对称的,所以截取每个字符的一半数量,计算排列组合的个数即可,(奇数个的字符,如果只有一个放在中间,不做排列组合考虑;其他的数量,如3,5,7等,一个放在中间,剩下的一半和其他字符的数量一半考虑组合) 例子:acbbbac 一半就是abc的排列组合数量;abbccccccbba 一半就是abbccc的排列组合数量
  4. 现在就需要考虑怎么计算组合数量 如果记得itertools库的话(python),permutations(一半的字符串,len(一半)),再将其转换成set()输出长度就行了,但是考试的时候我忘记了,当然平时练习中我也没有真正用过这个函数,如果有什么说错的地方,请指正。
  5. 如果不知道上述函数的话,虽然我自己琢磨出了个一规律,但是卡在75%所以应该还是有问题,请大佬解惑。 方法是计算一半字符串的长度阶乘,然后除以每个不止一次出现的字符的数量。

最大面积黑像素

和leetcode上 827. 最大人工岛 基本一致,只是最多可以把个0改成1,问1的最大面积

发现是困难题之后就pass了……不过通过count了数组中所有1的个数+2的方式,成功蹭到了32%的通过率。

全部评论
第3题除了枚举所有可能作为答案的两个0之外还有别的方法吗?感觉这样过于暴力了
1
送花
回复
分享
发布于 2022-04-11 10:41

相关推荐

5 18 评论
分享
牛客网
牛客企业服务