推荐《牛客网 | 大厂真题 | 笔试题库 | 面试经验 | 实习经验内推》
链接地址,废话少说速度上号刷题卷起来👉👉:点击链接进行免费刷题学习
1. 最大差值
描述:
有一个长为 n 的数组 A ,求满足 0 ≤ a ≤ b < n 的 A[b] - A[a] 的最大值。
给定数组 A 及它的大小 n ,请返回最大差值。
实现代码:
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param A int整型一维数组
# @param n int整型
# @return int整型
#
class Solution:
def getDis(self , A: List[int], n: int) -> int:
# write code here
maxVal=0 #设置差值,如果没有A[b]-A[a]>0的值,则返回最大值为0
dp=A[0] #获取0~b之间的最小值,默认最小值为A[0]
for i in range(1,n,1):
dp=min(A[i],dp)
maxVal=max(A[i]-dp,maxVal)
return maxVal
运行结果:
2. 交叉线
描述: 大M布置给小M一个题目:首先给出n个在横坐标上的点,然后连续的用半圆连接他们:首先连接第一个点与第二点(以第一个点和第二点作为半圆的直径)。然后连接第二个第三个点,直到第n个点。现在需要判定这些半圆是否相交了,在端点处相交不算半圆相交。如下图所示。
输入描述:输入的第一行包含一个整数T (1 ≤ T ≤ 10)表示有T组样例。每组样例的第一行是一个整数n (1≤n≤1000)。接下来的一行输入有n个用空格隔开的不同的整数a1,a2,…,an (-1000000 ≤ ai ≤ 1000000),(ai,0)表示第i个点在横坐标的位置
输出描述:对于每个输入文件,输出T行。每行输出"y"表示这些半圆有相交或者"n"。
实现代码:
while True:
try:
n = int(input())
for case in range(n):
m1 = int(input())
list1 = list(map(int,input().split()))
one = list()
for i in range(len(list1)):
if i <m1-1:
one.append((list1[i],list1[i+1]))
count = 0
flag = False
#print(one)
for i in one:
k1,k2 = i[0],i[1]
count+=1
for j in range(count,len(one)):
ppp = one[j]
p1,p2 = ppp[0],ppp[1]
if (min(k1,k2)<min(p1,p2) and max(k1,k2)>min(p1,p2) and max(k1,k2)<max(p1,p2))&nbs***bsp;(max(k1,k2)>max(p1,p2) and min(k1,k2)<max(p1,p2) and min(k1,k2)>min(p1,p2)):
flag =True
break
else:
continue
break
if flag == True:
print('y')
else:
print("n")
except:
break
3. 火眼金睛
描述: 现在我们需要查出一些作弊的问答社区中的ID,作弊有两种:1.A回答了B的问题,同时B回答了A的问题。那么A和B都是作弊。2.作弊ID用户A和作弊ID用户B同时回答了C的问题,那么C也是作弊。已知每个用户的ID是一串数字,一个问题可能有多个人回答。
输入描述:每组数据第一行为总问题数N(N小于等于200000),第二行开始每行一个问题,第一个数字为提问人ID,第二个数字为回答人数,后面则为所有回答人的ID。(ID均为0-1000000的整数)
输出描述:第一行为作弊ID数量,第二行开始为从小到大的每行一个作弊ID。
实现代码:
while True:
try:
qnum=int(input())
askId,ansNum=[0 for i in range(qnum)],[0 for i in range(qnum)]
wenda=[[0 for i in range(qnum+1)] for j in range(qnum+1)]
for i in range(qnum):
tmp=list(map(int,input().split()))
askId[i],ansNum[i]=tmp[0],tmp[1]
temp=2
for j in range(ansNum[i]):
ansId = tmp[temp]
temp+=1
wenda[askId[i]][ansId]=1
result=[]
for i in range(qnum+1):
count=0
for j in range(qnum+1):
if wenda[i][j]==1 and wenda[j][i]==1 and i!=j and i not in result:
count+=1
result.append(i)
if wenda[i][j]==1 and i!=j and j in result:
count+=1
if count>=2 and i not in result:
result.append(i)
result=[str(i) for i in result]
print(len(result))
print(' '.join(result))
except:
break
4. 如何让刷题更加高效呢?
最近很多学了基础的小伙伴问我该怎么提升编程水平?学了基础该上哪刷题?明明学了很多,做项目却不知道怎么上手,其实这就是练得太少,只注重了学,却忽视了刷题,只有不断练习才能提高和巩固编程思维和能力!
链接地址,废话少说速度上号刷题卷起来👉👉:点击链接进行免费刷题学习
链接地址:牛客网 | Python题库,废话少说速度上号!!!