美文网首页
华为机试 python解法

华为机试 python解法

作者: dataTONG | 来源:发表于2020-04-28 15:08 被阅读0次

    混淆点

    【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
    牛客网-华为机试刷题(一)

    相关文章

      网友评论

          本文标题:华为机试 python解法

          本文链接:https://www.haomeiwen.com/subject/fafswhtx.html