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"))