第一题:
输入说明:
第一行输入n代表队伍中的人数
第二行输入队伍中每个人的身高(用空格隔开)
比如输入:
5
2 3 1 5 4
6
5 4 1 6 8 2
输出说明:
如果现在所在位置之前没有比自己身高高的,数值变为-1,如果现在所在位置之前有比自己身高高的,数值变为所在位置之前那个离自己最近的且比自己高的那个人的身高
上例的输入对应输出:
5
-1 -1 3 -1 4
6
-1 5 4 -1 -1 8
# --*-- coding : utf-8 --*--
def No1(k, ls):
if k == 0: return []
res = [-1]
if k == 1: return res
res = []
for i in range(k-1):
temp = ls[i + 1:]
#print(temp)
#print(ls[i + 1:])
if max(temp) <= ls[i]:
res.append(-1)
else:
for j in temp:
if j > ls[i]:
res.append(j)
break
res.append(-1)
return res
if __name__ == '__main__':
n = input()
n = int(n)
m = input().split(' ')
m = list(map(int, m))
m = list(reversed(m))
#print(m)
res1 = list(reversed(No1(n, m)))
print(n)
print(' '.join([str(x) for x in res1]))
思路:首先反转输入的列表,为什么反转是因为这样做就不是往前找比他大的值而是往后找比他大的数值了(注意别忘了转回来),从当前位置往后找比它大的值,找到了就赋值当前位置,然后break,找不到就赋值为-1,别忘了最后一个位置一定是-1。
第二题:
对于每组数据,如果A可以变成B,输出"Y",否则输出“N”。
输入:
3
0 1 2 3 4
2 1 0 4 3
0
0
0
1
输出
Y
Y
N
def No1(m,l):
s='N'
a=sorted(m)
b=sorted(l)
if a==b:
s="Y"
else:
s="N"
return s
if __name__ == '__main__':
n = input()
n = int(n)
s=[]
while n>0:
m = input().split(' ')
l = input().split(' ')
m = list(map(int, m))
l = list(map(int, l))
a = No1(m,l)
s.append(a)
n-=1
for i in s:
print(i)
这个题目比较简单
就是比较排序后的数组是否相同
第三题:
每组输入一行,分别是字符串S,T,如果有该子串则输出该子串,否则输出空串。
输入:ADSKBACWDWKDEH
输入:ABCD
输出:BACWD
# --*-- coding : utf-8 --*--
def minWindow(s,t):
from collections import Counter
t=Counter(t)
lookup=Counter()
start=0
end=0
min_len=float("inf")
res=""
while end<len(s):
lookup[s[end]]+=1
end+=1
#print(start, end)
while all(map(lambda x: lookup[x]>=t[x],t.keys())):
if end-start<min_len:
res=s[start:end]
min_len=end-start
lookup[s[start]]-=1
start+=1
return res
if __name__ == '__main__':
S = input()
T = input()
L=minWindow(S,T)
print(L)
整理不易,看官老爷们看完给个赞啊!
(不给也可以最好给个吧~在线卑微)