Python 初学之华为OD机试题:求最大数字

发布时间 2023-12-13 15:22:32作者: Cygwin_

题目描述

给定一个由纯数字组成以宇符串表示的数值,现要求字符串中的每个数字最多只能出现2次,超过的需要进行删除;删除某个重复的数字后,其它数字相对位置保持不变。
如"34533”,数字3重复超过2次,需要册除其中一个3,删除第一个3后获得最大数值"4533"。请返回经过删除操作后的最大的数值,以字符串

输入描述

第一行为一个纯数字组成的字符串,长度范围:[1,100000]

输出描述

输出经过删除操作后的最大的数值

示例1

输入
34533
输出
4533

示例2

输入
5445795045
输出
5479504


自己写的不一定完全对,思路如下
将数字拆分成单一数字组成的数组,统计count大于2的元素,并比较当前元素与下个元素,如当前元素小于下一个元素,则删除该元素,否则保留

num = '5445795045'
#num = '34533'
num_list = [int(i) for i in num]

num_index =[]

print('number_list:',num_list)
for n in range(len(num_list)): 
    var = num_list[n]
    print('index:',n,'value:',var,'count:',num_list.count(var))
    if(num_list.count(var)>2 and n<len(num_list)):
        print('count>2: index',n,'value:',var,'count:',num_list.count(var))
        if(n == len(num_list)-1):
            if(num_list.count(var)>2):
                num_list[n] = 'D'
                print('num_list:',num_list)
            break          
        if(num_list[n] <num_list[n+1]):
            print(num_list[n],'<',num_list[n+1],' need remove value index:',n,'value:',var,'count:',num_list.count(var))
            num_list[n] = 'D'
            #num_index.append(n)
            #del num_list[n]
            print('num_list:',num_list)
        else:
            print(num_list[n],'>=',num_list[n+1],'no action')

print('number_list:',num_list)

while num_list.count('D')>0:  
    num_list.remove('D')
print('number_list remove:',num_list)
str_list = [str(i) for i in num_list]
result = ''.join(str_list)
print('final number_list:',result)

#print('number_index:',num_index)      
#for i in sorted(num_index,reverse=True):
#    print('remove:',i,num_list[i]) 
#    del num_list[i]
#print('result:',num_list)