题目一:
题目描述
一个有序的整数列表示方式通常使用逗号隔开。如果序列中的几个整数是连续递增 1 时可以使用数字范围的方式表达,通常用[-] 符隔开。而 [-]的两端分别表示此数据范围的起始数据和结束数据 (包括起始数据和结束数据),如果想使用区域的表达方式必须保证区域中至少有 3 个整数。
例如: 12.13,15-17。
此任务会提供一个有序的整数列表,你需要编写函数按上述描述将此列表进行相应的格式化。
示例:
输入
-6 -3 -2 -1 0 1 3 4 5 7 8 9 10 11 14 15 17 18 19 20
输出
-6,-3-1,3-5,7-11,14,15,17-20
代码如下:
nums = [-6, -3, -2, -1, 0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20]
# nums = list(map(int, input().split()))
left = right = 0
res = []
while right < len(nums):
while right < len(nums)-1 and nums[right] == nums[right + 1] - 1:
right += 1
if right - left + 1 > 2:
res.append(str(nums[left]) + '-' + str(nums[right]))
else:
res.extend(nums[left:right+1])
right += 1
left = right
print(','.join([str(x) for x in res]))
-6,-3-1,3-5,7-11,14,15,17-20
题目二:
题目描述:
每日股票价格
给定某只股票连续N天的价格列表stockPrices,其中stockPrices表示股票某天的价格请生成一个新列表,对应位置输出为:要想等到股票价格上涨,至少需要等待的天数,如果股票价格不上涨,对应位置输出为0。
输入
第一行表示第二行元素的个数N
第二行为用空格隔开的整数,表示每天股票的价格
其中0输出
输出为用空格分隔的长度为N的列表,对应位置为;要想等到股票价格上涨,至少需要等待的天数
样例1
输入
5
33 34 14 12 16
输出
1 0 2 1 0
样例2
输入
5
12 13 14 15 16
输出
1 1 1 1 0
代码如下:
'''
从后往前
'''
stockPrices = [33, 34, 14, 12, 16]
n = 5
# n = int(input())
# stockPrices = list(map(int, input().split()))
res = [0] * n
stack = []
for i in range(n-1, -1, -1):
while stack and stockPrices[stack[-1]] <= stockPrices[i]:
stack.pop()
res[i] = (i if not stack else stack[-1]) - i
stack.append(i)
print(' '.join([str(x) for x in res]))
1 0 2 1 0
'''
从前往后
'''
stockPrices = [33, 34, 14, 12, 16]
n = 5
# n = int(input())
# stockPrices = list(map(int, input().split()))
result = [0] * n
stack = []
for i in range(n):
while stack and stockPrices[stack[-1]] <= stockPrices[i]:
top = stack.pop()
result[top] = i - top
stack.append(i)
print(' '.join([str(x) for x in result]))
1 0 2 1 0
题目三:
题目描述:
中庸行者
给定一个 m*n 的整数矩阵作为地图,矩阵数值为地形高度:
中庸行者选择地图中的任意一点作为起点,尝试往上、下、左、右四个相邻格子移动移动时有如下约束:
1 中庸行者只能上坡或者下坡,不能走到高度相同的点;
2 不允许连续上坡或者连续下坡,需要交替进行;
3 每个位置只能经过一次,不能重复行走;
请给出中庸行者在本地图内,能连续移动的最大次数。
输入
一个只包含整数的二维数组:
3 3
4 7 8
8 6 6
2 6 4
第一行两个数字,分别为行数和每行的列数;
后续数据为矩阵地图内容;
矩阵边长范围:[1,8];
地形高度范围:[0,100000];
输出
一个整数,代表中庸行者在本地图内能够移动的最大次数。
样例1
输入
2 2
1 2
4 3
输出
3
样例2
输入
33
1 2 4
3 5 7
6 8 9
输出
4
matrix = [[1, 2, 4], [3, 5, 7], [6, 8, 9]]
m, n = 3, 3
# m, n = map(int, input().split())
# matrix = []
# for _ in range(m):
# matrix.append([int(c) for c in input().split()])
def moderateWalker(matrix, m, n):
used = set()
def dfs(i, j, flag):
ans = 0
for (ni, nj) in ((i+1, j), (i-1, j), (i, j+1), (i, j-1)):
if ni < 0 or nj < 0 or ni >= m or nj >= n or \
matrix[ni][nj] == matrix[i][j] or (ni, nj) in used:
continue
if flag == False and matrix[ni][nj] <= matrix[i][j]:
continue
if flag == True and matrix[ni][nj] >= matrix[i][j]:
continue
used.add((i, j))
ans = max(ans, dfs(ni, nj, flag ^ True) + 1)
used.remove((i, j))
return ans
res = 0
for i in range(m):
for j in range(n):
res = max(res, dfs(i, j, False), dfs(i, j, True))
print(res)
moderateWalker(matrix, m, n)
4