面试的算法(自己或者同学遇到的算法题)

1给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口 k 内的数字。滑动窗口每次只向右移动一位。

返回滑动窗口最大值。

示例:

输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3
输出: [3,3,5,5,6,7] 
解释:

代码:

def maxInWindows(num, size):

    if not num:
        return []
    if size > len(num) or size < 1:
        return []
    if size == 1:
        return num

    tmp = [0]    # 存的是列表的索引
    res = []
    for i in range(len(num)):
        # 确保tmp中最多不超过窗口值-1
        if i - tmp[0] > size - 1:
            tmp.pop(0)
        while len(tmp) > 0 and num[i] >= num[tmp[-1]]:
            tmp.pop()
        if len(tmp) < size - 1:
            tmp.append(i)
        if i >= size - 1:
            res.append(num[tmp[0]])
    return res


a = [3, 3, 3, -5, 3, 6, 7]
print(maxInWindows(a, 3))

2 给定一个数组,求其中互为绝对值的对数。如[1, 2, -1, 2 , -2, -2, -1]  返回两对。

2019年9月3日 17点56分

这是同专业同学前端笔试算法题,不难理解, 舍友帮做,用js敲了很久,,我用python不到5分钟,做出来,,,python真TM简单,

因为太简单,不加注释了

a = [1, 2, -1, -2, 4, -4, 1, 1, 1, 9, -9, 8, 0, 9, -9]


def my_sort(arr):
    tmp = 0
    b = list(set(a))
    for i in range(len(b)):
        b[i] = abs(b[i])
    for i in b:
        if b.count(i) == 2:
            tmp += 1
    return tmp // 2


print(my_sort(a))

3 按顺时针打印数组

还以为有什么巧妙的方法,原来真是暴力解法,,

def print_arr(arr):
    result = []
    while True:
        try:
            # 打印第一行
            len_top = len(arr[0])
            for i in range(len_top):
                result.append(arr[0].pop(0))
            arr.pop(0)
            # 第一行的元素已经pop完了,但是此时matrix[0] = []而非none,所以这里得pop一下

            # 打印每行的最右的数
            len_right = len(arr)
            for i in range(len_right):
                result.append(arr[i].pop(-1))

            len_bottom = len(arr[-1])
            for i in range(len_bottom):
                result.append(arr[-1].pop(-1))
            arr.pop(-1)

            len_left = len(arr)
            for i in range(len_left-1, -1, -1):
                result.append(arr[i].pop(0))
        except Exception:
            return result


if __name__ == "__main__":
    # a = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17, 18]]
    c = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
    print(print_arr(c))

 

杂碎,数字返回文字读法

def my_sort(p):
    tmp = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"]
    tmp1 = ["", "十", "百", "千", "万"]
    for i in p:
        if not i.isdigit():
            return "输入错误"
    s = []
    s_list = list(p)
    flag = True
    for i in range(len(s_list)):
        if s_list[i] == "0":
            if flag:
                s += tmp[int(s_list[i])]
                flag = False
        else:
            s += tmp[int(s_list[i])] + tmp1[len(s_list) - i - 1]
    s = "".join(s)
    return s

print(my_sort("10002"))

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值