前段时间面试的时候,一个公司想给一个问题的解决方案。我也在网上搜索了类似的问题。核心思想可以参考LeetCode中的767字符串重构。这里就不过多介绍了。链接如下:Refactoringstrings题目描述:小明有一些气球想挂在墙上装饰。他希望同一种颜色的气球不要挂在一起。写一个算法帮他找到挂气球的可行方法。自己定义函数输入和返回。如果不可能让相同颜色的气球不挂在一起,请定义一个合适的异常方法ReturnclassBalloonArrangement(object):"""BalloonArrangement"""@staticmethoddefcal_ret(data:dict):'''Calculate挂气球的可行方法:paramdata::return:'''bal_count=sum([iforiindata.values()])#气球总数#气球颜色数max_count=sorted(data.items(),key=lambdav:v[1],reverse=True)[0][1]res=[]ifmax_count>(bal_count+1)//2:#不可能做出相同颜色的气球不挂在一起return''fork,countindata.items():res.extend(k*count)ans=[None]*bal_countans[::2],ans[1::2]=res[bal_count//2:],res[:bal_count//2]return"-".join(ans)data={'r':3,#3红色气球'b':2,#2蓝色'w':1,#白色1}b=BalloonArrangement.cal_ret(data)print(b)#b-r-b-r-w-r-->蓝红蓝红白红
