面试18K高级自动化测试的算法题 - 全排列,二维查找

本文解析了两道Python算法题:一是利用迭代器库itertools实现字符串全排列并排序;二是采用二分查找法在二维数组中寻找目标值。文章提供了完整代码示例,并鼓励读者尝试不使用第三方库解决第一题。

直接来图

第三题比较简单,这里就不写了,咱们来看看前面 2 个算法题

首先第一题,题目条件没写不允许用第三方库,那么咱们可以灵活使用 python 的一个强大的迭代器库
itertools

  import itertools
def sorted_(test_str):
    res = set(itertools.permutations(test_str))
    return sorted(list(map(lambda x:''.join(x), res)))

print(sorted_('zyx'))

#['xyz', 'xzy', 'yxz', 'yzx', 'zxy', 'zyx']

再来看看第二题,二维数组的查找,咱们可以用二分法

  def findArray(arr, target):
    """
    二分法进行二维数组查找
    :param arr:
    :param target:
    :return:
    """
    if len(arr) == 0:
        return False
    row = 0
    col = len(arr[0])-1
    while row < len(arr) and col >= 0:
        if arr[row][col] == target:
            return True
        elif target > arr[row][col]:
            row += 1
        else:
            col -= 1
    return False

print(findArray([[1,7,12,32],[5,9,18,38],[9,13,19,41],[17,20,32,50]],50))
# True

搞定了,可能不是最优解。

个人觉得如果遇到算法题,这 2 题属于难度容易-中等之间(对于测试来说),要做到能现场手写,大家可以试试第一题不用工具库怎么实现

等等  不会有人第三题也不会吧,不会吧不会吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值