8.20网易笔试
4道编程+1道简答(简答里面两个小问题好鸡贼
1. 一个长度为n的数组,里面的数字包含从1-n,每个数字仅有一个。操作为每次可以选择一个数+1同时选择另外一个数-1,但是每次操作后数组中仍然是每个数字有且仅有一个。问最少多少次操作后将数组转换成一个非降序数组。
思路:本来打算用一个结果数组统计多少次加多少次减,但是发现思路不太对,直接跳过了,最后没时间回来看过来0%
2. 一个string里面只包含r\e\d三种字符,判断有多少组合中r\e\d的出现次数相等。
思路:写了一个函数用来判断当前切片字符子串中的red出现次数是否相等,用异或判断的。然后用size为3、6、9...的滑动窗口去遍历字符串,但是最后通过率为0,很疑惑。代码我贴出来吧。。。
string = input()
length = len(string)
def equal(flag,s):
if flag:
res = "red"
else:
res = ""
ans = 0
for char in s+res:
ans ^= ord(char)-ord('0')
return ans == 0
flag = True
size = 3
res = 0
while length >= size:
i,j = 0,size-1
while j<length:
if equal(flag,string[i:j+1]):
res+=1
i+=1
j+=1
size+=3
if flag:
flag = False
else:
flag = True
print(res) 思路:直接用heapq选择k个最大的数,做位与操作,通过了38%。
4. 输入三个数,a,b,n。前两个为前两个项的数,后面每个数都是前两个数的乘积的平方,输出第n个数,如果超了1e9+7要取余。
思路:用两个参数迭代,最后一个结果取余,但是overflow了,最后通过了8%。
总结:网易笔试真的是把我按在地上摩擦。
