网易手撕代码

一最大最小值

小易给定了一个长度为n的数字序列,对于每一个,小易希望能求解出所有长度为k的连续子序列的最大值中的最小值。

输入描述

第一行数字n 

接下来一行是一个长度为n的数字序列,

输出描述

一行n个数字,第i个数字表示k = i时的答案。

示例1

输入

6
1 3 2 4 6 5

输出

1 3 3 4 6 6

说明

当k = 2的时候
子序列分别是:
1 3 最大值为 3
3 2 最大值为 3
2 4 最大值为 4
4 6 最大值为 6
6 5 最大值为6 所有最大值中的最小值为3 
n=int(input())
lists=list(map(int,input().split()))
result=[]
for i in range(1,n+1):
    alist=[]
    for j in range(n-i+1):
        alist.append(max(lists[j:j+i]))
    result.append(min(alist))
print(' '.join(map(str,result)))

二打开文件,读取第三行内容

f=open('hello.txt',r)
for line in f.readlines()[3:4]:
    print(line)
f.close()

 

三相等序列

题目给定a1,a2...an,这样一个长度为n的序列,现在你可以给其中一些元素加上一个值x(只能加一次),然后可以给另外一些值减上一个值x(只能减一次),剩下的元素不能再进行操作。问最后有没有可能找到一个值x使所有元素的值相等。

输入描述

输入第一行为一个整数k,代表有k个序列(k<100),接下来有2*k行:

偶数行为一个整数n,代表给定序列的长度(1<=n<=100,000)

奇数行包含n个元素,a1,a2...an,代表序列中的元素(0<=ai<=100,000)

 

输出描述

输出k行,每行一个YES或者NO

示例1

输入

1
5
1 3 3 2 1

输出

YES
def fun(k):
    for i in range(k):
        n=int(input())
        alist=list(map(int,input().split()))
        l=len(alist)
        mid=sum(alist)//l
        blist=[]
        for i in range(l):
            if alist[i]==mid:
                continue
            elif alist[i]>mid:
                gap=alist[i]-mid
                blist.append(gap)
            else:
                gap=mid-alist[i]
                blist.append(gap)
        for i in range(len(blist)-1):
            if blist[i]!=blist[i+1]:
                return False
        return True
k=int(input())
f=fun(k)
print(f)
m=int(input())
while m>0:
    n=int(input())
    a=list(map(int,input().split()))
    temp=[]
    avg=sum(a)//n

    for i in a:
        if abs(i-avg)!=0:
            if abs(i-avg) not in temp:
                temp.append(abs(i-avg))
    if len(temp)==1:
        print("yes")
    else:
        print("no")
    m-=1

 

你可能感兴趣的:(牛客)