腾讯2020届算法类提前批机试题python版 含部分解答

        没有标准答案,只是考完后先把题目记在这里,欢迎大佬们提点思路和秀程序。

第一题

思路:迭代n-1次找最近的点、距离数累加。

自己做的代码写得比较复杂,运算时长超时,就不贴出来了 ……

同学做的case通过100%,但毕竟复杂:

import sys
myInput = sys.stdin.readline().strip()


aList = list(map(int, myInput.split()))
n,a = aList[0],aList[1]
myInput = sys.stdin.readline().strip()
aList = list(map(int, myInput.split()))
aList.sort()
if n==1:
    print(0)
elif a<=aList[0]:
    print(aList[-2]-a)
elif a<=aList[1]:
    turn_left = min((a-aList[0])*2,aList[-1]-aList[-2])+aList[1]-a+max(0,aList[-2]-aList[1])
    turn_right = aList[-1]-a
    print(min(turn_right,turn_left))
elif a>=aList[-1]:
    print(a-aList[1])
elif a>=aList[-2]:
    turn_right = min((aList[-1]-a)*2,aList[1]-aList[0])+a-aList[-2]+max(0,aList[-2]-aList[1])
    turn_left = a-aList[0]
    print(min(turn_right,turn_left))
else:
    turn_right = min((aList[-1]-aList[-2])*2,aList[1]-aList[0])+aList[-2]-a+max(0,aList[-2]-aList[1])
    turn_left = min((aList[1]-aList[0])*2,aList[-1]-aList[-2])+a-aList[1]+max(0,aList[-2]-aList[1])
    print(min(turn_right,turn_left))

第二题

腾讯2020届算法类提前批机试题python版 含部分解答_第1张图片

用迭代方法,但是运算超时。思路应该是比较清晰的:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sun Mar 10 21:24:28 2019
Tencent 2
@author: youxinlin
"""
h=[]
n=int(input())
for i in range(n):
    h.append(int(input()))
height=h[::-1]

#f[i] = min(f[i-1], g[i-1]) +height[i-1] 最近一层是走上来的话,最短时间
#g[i] = min(f[i-1], f[i-2]) 最近一层是跳上来的话,最短时间

def f(i):
    if i==1:
        return height[0]
    return min(f(i-1),g(i-1)) + height[i-1]

def g(i):
    if i<=2:
        return 0
    return min(f(i-1),f(i-2))

print(f(n))

第三题

腾讯2020届算法类提前批机试题python版 含部分解答_第2张图片

记得是按题意暴力解的……代码找不到了【。。】

提示:机考时编程题是允许切换窗口使用本地IDE的。可以在本地写好后粘贴进去。

第四题

腾讯2020届算法类提前批机试题python版 含部分解答_第3张图片

题目太长没看【手动笑哭】赶脚腾讯的题目整体难度比拼多多高比较多。每一题细节处理都要很在意,边缘条件都要考虑到。导致后面时间非常紧张。

第五题

腾讯2020届算法类提前批机试题python版 含部分解答_第4张图片

最后一题没什么时间想了,直接用简单粗暴暴力破解:

case通过率50%,时间超时,仅供参考思路。。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sun Mar 10 20:12:49 2019
Tencent5 50%
@author: youxinlin
"""

n = int(input())
myList = list(map(int,input().split()))

if n>=1:
    for i in range(1,n):
        thisPoint = myList[i] 
        #对序列中的每一个元素考察:
        d_List = [ abs(thisPoint - myList[j]) for j in range(0,i) ]
        
        min_val = min(d_List)
        
        index = 0

        while index < len(d_List):
            if min_val == d_List[index]:
                pj = index+1
                print(min_val,pj)
                break
else:
    #个数只有1个
    pass
    

 

你可能感兴趣的:(Python,各大厂算法方向编程机考题合集)