【Python】网易数据分析刷题

1

小易在维护数据的时候遇到一个需求,具体来说小易有一系列数据,这些数据了构成一个长度为n的数字序列,接下来小易会在这个序列上进行q次操作。 每次操作有一个查询的数字x,小易需要将序列数据中所有大于等于x的数字都减一,并输出在本次操作中有多少个数字被减一了。 小易犯了难,希望你能帮帮他。

输入描述:
第一行n,q,表示数字个数和操作个数。 接下来一行n个数表示初始的数字。 接下来q行,每行一个数,表示指定的数字x。

输出描述:
对于每个询问,输出一个数字表示答案

输入例子1:
4 3
1 2 3 4
4
3
1

输出例子1:
1
2
4

题目来源:牛客网

n, q = map(int, input().split())
arr =  list(map(int, input().split()))
for i in range(q):
    x = int(input())
    count = 0
    for j in range(len(arr)) :
        if arr[j] >= x:
            arr[j]-=1
            count+=1
    print(count)
    #arr = [each - 1 for each in arr if each>=x ]

2

小易学习了辗转相除法之后,就开始实践这个算法在求解最大公约数上。
牛牛给小易出了一道不同寻常的求解最大公约数: 求解a和b的最大公约数,但是a和b的范围特别大。
小易遇到了困难,向聪明的你寻求帮助,希望你能帮帮他。

输入描述:

第一行数字a,第二行数字b。

输出描述:

一行一个数字表示答案

输入例子1:
6
4

输出例子1:
2

输入例子2:
7951346523609888
6998915114363550
输出例子2:
1013754

小甲鱼是这样写的:

def gcd(a,b): 
    while b:
        r = a%b
        a = b
        b = r
    return a
    if r != 0:
        gcd(b,r)
if __name__ == '__main__':
    a,b = map(int, input().split())  
    print(gcd(a,b))   

3

小易有一个初始为空的数字集合,支持两种操作:
1、加入数字x到集合中。
2、询问集合中是否存在一个子集,满足子集中所有数字的Or值恰好为k。
Or为二进制按位或操作,C++中表示为"|"。
小易希望你能解决这个问题。

输入描述:

第一行数字q,表示操作个数 接下来q行,每行两个数字:
1 x表示插入数字x
2 x表示询问数字x(即题设中询问的数值k) , 。

输出描述:
对于每个询问,输出"YES"或者"NO"表示是否存在。

输入例子1:

9
1 4
2 5
1 9
1 15
2 4
1 11
2 10
2 7
2 9

输出例子1:

NO YES NO NO YES

没明白数字的or值怎么算

4

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

输入描述:

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

输出描述:

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

输入例子1:

6 1 3 2 4 6 5

输出例子1:

1 3 3 4 6 6

例子说明1:

当k = 2的时候 子序列分别是:
1 3 最大值为 3
3 2 最大值为 3
2 4 最大值为 4
4 6 最大值为 6
6 5 最大值为6
所有最大值中的最小值为3

k=1时,输出全列最小值
k=n时,输出全列最大值
对于每个长度k=2:n,从位置0开始找,
复杂度太高,通过率只有30%

length = int(input())
num = list( map(int, input().split()))
print(min(num), end=' ')
for k in range(2,length):
    maximum =[max(num[i:i+k]) for i in range(length-k+1)]
    print(min(maximum[:]), end=' ')
print(max(num))

数字排序问题:
输入n,k,分别为数字个数,不能相邻数字对数
之后输入的k行 是不能相邻的数字对x,y

按字典顺序输出所有符合要求的序列

输入例子: 3 2 1 2 2 1

输出例子: 1 3 2 2 3 1

完全没思路啊
一遇到排列组合问题就蒙圈

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值