【OJ刷题 |华为机试题】

59 篇文章 1 订阅
8 篇文章 0 订阅

欢迎关注微信公众号“Python小灶,和我一起每天学习Python新知识”,还可添加博主Vx:yf03064131,方便一起交流学习。
在这里插入图片描述
或者B站搜索 有只小新

20210909,总共三题:

多数组合并

题目:现在有多组整数数组,需要将他们合并成一个新的数组。合并规则,从每个数组里按顺序取出固定长度的内容合并到新的数组中,取完的内容会删除掉,如果该行不足固定长度或者已经为空,则直接取出剩余部分的内容放到新的数组中,继续下一行。如样例1,获得长度3,先遍历第一行,获得2,5,6;再遍历第二行,获得1,7,4;再循环回到第一行,获得7,9,5;再遍历第二行,获得3,4;再回到第一行,获得7,按顺序拼接成最终结果。
输入描述:
第一行是每次读取的固定长度,长度>0;
第2~n行是需要合并的数组,不同的数组用回车换行分隔,数组内部用逗号分隔。
输出描述:
输出一个新的数组,用逗号分隔。
输入:
3
2,5,6,7,9,5,7
1,7,4,3,4
输出:
2,5,6,1,7,4,7,9,5,3,4,7

思路:循环每个列表输出即可,注意pop的使用方法对列表的影响,以及子空列表不能删除防止对列表长度造成影响
代码:

c = 2  # 本地调试打开,只输入两轮,正常机试不需要
n = 3
a_list = []
while c > 0:
    try:
        a = input().split(",")
        a_list.append(a)
    except:
        break
    finally:   # 本地调试打开,只输入两轮,正常机试不需要
        c -= 1
b = ''
count = 0
while count < len(a_list):
    for i in range(len(a_list)):
        if len(a_list[i]) >= n:
            for j in range(n):
                b += a_list[i].pop(0)
        elif 0 < len(a_list[i]) < n:
            for j in range(len(a_list[i])):
                b += a_list[i].pop(0)
        else:
            count += 1

print(b)

数组排序

     给定一个非空数组(列表)
     起元素数据类型为整型
     请按照数组元素十进制最低位从小到大进行排序
     十进制最低位相同的元素,相对位置保持不变
     当数组元素为负值时,十进制最低为等同于去除符号位后对应十进制值最低位

     输入描述
     给定一个非空数组(列表)
     其元素数据类型为32位有符号整数
    数组长度为[1,1000]
    输出排序后的数组

    输入
    1,2,5,-21,22,11,55,-101,42,8,7,32
    输出
    1,-21,11,-101,2,22,42,32,5,55,7,8

思路:理解题意,就是简单的排序,按照个位数的大小排序,负数当成正数看。
代码:

# 方法一
a_list = input().split(",")

def takeLast(elem):
    return elem[-1]


a_list.sort(key=takeLast)
print(",".join(a_list))

# lambda

最长的指定瑕疵度的元音字串

标题:最长的指定瑕疵度的元音子串 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限
开头和结尾都是元音字母(aeiouAEIOU)的字符串为 元音字符串 ,其中混杂的非元音字母数量为其 瑕疵度 。比如:
· “a” 、 “aa”是元音字符串,其瑕疵度都为0

· “aiur”不是元音字符串(结尾不是元音字符)

· “abira”是元音字符串,其瑕疵度为2

给定一个字符串,请找出指定瑕疵度的最长元音字符子串,并输出其长度,如果找不到满足条件的元音字符子串,输出0。

子串:字符串中任意个连续的字符组成的子序列称为该字符串的子串。

收起
输入描述:
首行输入是一个整数,表示预期的瑕疵度flaw,取值范围[0, 65535]。
接下来一行是一个仅由字符a-z和A-Z组成的字符串,字符串长度(0, 65535]。
输出描述:
输出为一个整数,代表满足条件的元音字符子串的长度。

示例1
输入
0
asdbuiodevauufgh
输出
3
说明
满足条件的最长元音字符子串有两个,分别为uio和auu,长度为3。

示例2
输入
2
aeueo
输出
0
说明
没有满足条件的元音字符子串,输出0
示例3
输入
1
aabeebuu
输出
5
说明
满足条件的最长元音字符子串有两个,分别为aabee和eebuu,长度为5

代码:

def longest_alp(degree, string):
    vowel_string = "aeiouAEIOU"
    head, length, tail = 0, 0, len(string) - 1

    def flaw_degree(string):
        degree = 0
        for i in string:
            if i in vowel_string:
                continue
            degree += 1
        return degree

    result = []
    while head <= tail:
        if string[head].startswith(tuple(vowel_string)) and string[tail].endswith(tuple(vowel_string)):
            result.append(string[head:tail + 1])
            if string[head + 1].startswith(tuple(vowel_string)):
                tail -= 1
            else:
                head += 1
        elif string[head].startswith(tuple(vowel_string)) and not string[tail].endswith(tuple(vowel_string)):
            tail -= 1
        else:
            head += 1

    for item in result:
        if flaw_degree(item) == degree:
            length = max(length, len(item))
    return length


if __name__ == '__main__':
    print(longest_alp(0, "asdbuiodevauufgh"))
    print(longest_alp(2, "aeueo"))
    print(longest_alp(1, "aabeebuu"))

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值