华为机试 python解法

2020-04-28  本文已影响0人  dataTONG

混淆点

【sorted(list)不改变list,而list.sort()改变list】

b = [2,1,5]
print(sorted(b))  #[1, 2, 5]
b #[2, 1, 5]

a = [2,1,5]
a.sort()
a #[1, 2, 5]

【input()】

input()  #输入[1, 2, 5],输出 '[1, 2, 5]'
input_str=input()  【输出str】
input_list= input_str.split(',')  【输出list,里面是str类型】
input_list= [int(x) for x in input_str.split(',')]  【输出list,里面是int类型】

'builtin_function_or_method' object is unsubscriptable  【把()写成[]导致的】

20200628

list = input().split(',')
a=int(input())
list.append(a)
list = [int(i)  for i in list]
sorted(list).index(a)

20200428华为的机试题:两个str的最长公共子串的长度

【永远忘不掉把,因为昨晚20200428华为的机试题,现在折腾出了答案,有点繁琐】

需要注意两点:
(1)因为有重复测试,所以需要添加
while True:
try:
(2)如何求解列表中的最长元素:max(arr,key=len)
(3)真实做题环境,至少我还是需要借助IDE来辅助循环。

while True:
    try:
        a=input()
        b=input()
        temp=''
        if len(a)>=len(b):
            temp=a
            a=b
            b=temp

        arr=[]
        for i in range(len(a)):
            j=len(a)
            while i<j and (a[i:j] not in b):
                #print('__'+a[i:j])
                j=j-1

            #print(a[i:j])
            arr.append(a[i:j])

        print(max(arr,key=len))
    except:
        break

不错的题

1、数据表记录包含表索引和数值(int范围的整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。

【map作用于list上的用法  map(int,input().split())、有序输出for x in sorted(z.keys())的用法】
【法1】
a=input()
z={}
for i in range(int(a)):
    k,v=map(int,input().split())
    z[k]=z.get(k,0)+v
    
for x in sorted(z.keys()):   #  list.sort()  或者  sorted(可迭代对象)
    print(x,z[x])

【法2】
a=int(input())
z={}
for i in range(a):
    k,v = map(int,input().split())
    if k in z.keys():
        z[k]+=v
    else:
        z[k]=v
        
for x in sorted(z.keys()):
    print(x,z[x])

2、输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。

【不含重复数字  转换成 输出对象 if i not in b:的处理方式】
a=input()[::-1]
b=''
for i in a:
    if i not in b:
        b+=i

print(int(b))

3、编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127),换行表示结束符,不算在字符里。不在范围内的不作统计。注意是不同的字符
列表list变str——‘,’.join(list);
str变列表list——input().split() 或者 list(可迭代对象,如str / input()),如list('123 ')为['1', '2', '3', ' ']

【len(set)即set有长度、list(str / input())——list会把str转化成list】
a=input()
b=len(set(list(a)))
print(b)

4、以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开

def rev(a):
    a=a.split()
    a.reverse()
    b=''
    for i in a:
        b+=i+' '
    print(b)
    
rev(input())

机试范围题

?????

def corpFlightBookings(self, bookings: List[List[int]], n: int) -> List[int]:
        answer=[0 for i in range(n+1)]
        for i,j,v in bookings:
            answer[i-1]+=v
            answer[j]-=v
        res=[answer[0]]
        for i in range(1,len(answer)):
            res.append(res[-1]+answer[i])
        res.pop()
        return res
def sort(arr):
    newarr=[]
    i=0
    while i <len(arr):  #range(len(arr))
        j=i
        while (j+1<len(arr) and arr[j]+1==arr[j+1]):
            j+=1
        if i !=j:
            newarr.append('{}-{}'.format(arr[i],arr[j]))
            i=j+1
        else:
            newarr.append(str(arr[i]))
            i=i+1
            
    return  ','.join(newarr)  #str(newarr)[1,-1]  #,'.join(newarr)   #newArr.join(',')

arr=[int(x) for x in input().split(',')]    #[1,2,3,5,7,9,10,12]
print(sort(arr))
def function(arr):
    button=["0 ","1,.?!","2ABC","3DEF","4GHI","5JKL","6MNO","7PQRS","8TUV","9WXYZ"]

    str=''
    for i in range(len(arr)):
        num=arr[i][0]        
        if len(arr[i])>len(button[int(num)]):
            index=len(arr[i]) % len(button[int(num)])-1  #int(num)
        else:
            index=len(arr[i])-1
        str+=button[int(num)][index]
    
    return str

arr = input().split()#['22', '5555', '22', '666', '00', '88', '888', '7777', '4444', '666', '44']
function(arr)
def find(n,m):
    arr=[True] * n
    count=0  #数组下标
    index=0  #报数记录
    total=n  #已退出游戏人数
    while (count<n and total>1):
        if arr[count]==True:
            if index== m-1:
                arr[count]=False
                index=0
                total-=1
            else:
                index+=1
        count+=1
        if count==n:
            count=0
    return arr.index(True)+1

find(4,3)   
def split(str,delim=''):
    newstr=[]
    temp=''
    i=0
    while i<len(str):
        if len(delim)>0:
            index=0
            while (index<len(delim) and str[i+index]==delim[index]):
                index +=1
            if index<len(delim):
                temp+=str[i]
                i+=1
            else:
                if len(temp)>0:
                    newstr.append(temp)
                temp=''
                i+=len(delim)
        else:
            newstr.append(str[i])
            i=i+1
    if len(temp)>0:
        newstr.append(temp)
    
    return newstr

split('adbdcdedd','d')
def candy(ratings):
    arr = [1]*len(ratings)
    for i in range(1,len(ratings)):
        if ratings[i]>ratings[i-1]:
            arr[i] = arr[i-1] +1
            
    j=len(ratings)-2
    while j>=0:
        if ratings[j]>ratings[j+1] and arr[j]<=arr[j+1]:
            arr[j] = arr[j+1]+1
        j-=1
        
    total=0
    for i in range(len(arr)):
        total+=arr[i]
    
    return total

candy([1,2,2])
def print(ratings):
    arr = [0]* len(ratings)
    index=1
    while max(ratings)>0:
        arr[ratings.index(max(ratings))] = index
        index+=1
        ratings[ratings.index(max(ratings))] = 0
    return arr

print([3,1,2,2,3,9])
#一次性输入长度为5,逗号‘,’分隔的数字(如:11010,00110,11111),求5福个数

input_str=input()
input_list= input_str.split(',')
#input_list= [int(x) for x in input_str.split(',')]
ret = [0,0,0,0,0]

print(input_str)
print(input_list)

for x in input_list:
    print(x)
    for index,y in enumerate(x):  ##enumerate(可迭代)——for k,v in enumerate(map(int,input().split())): print(k,v)
        print(index,y)
        ret[index] =  ret[index] + int(y)

print(min(ret))
def get(a,b):
    suma=0
    sumb=0
    for i in range(len(a)):
        suma+=a[i]
        sumb+=b[i]
        
    min=abs(suma-sumb)
    for i in range(len(a)):
        for j in range(len(b)):
            temp=0
            if abs((2*(b[j]-a[i]))+suma-sumb)<min:
                suma=suma-a[i]+b[j]
                sumb=sumb-b[j]+a[i]
                temp=a[i]
                a[i]=b[j]
                b[j]=temp
                min=abs(suma-sumb)
                
    return a,b

get([1, 3, 5 ,49],[0,2,4,18])    

Interview-code-practice-python
牛客网-华为机试刷题(一)

上一篇下一篇

猜你喜欢

热点阅读