Python中文社区菜鸟学Python大数据 爬虫Python AI Sql

柠檬水找零引起的自信打击

2020-04-21  本文已影响0人  爱吃西红柿嘛

人啊,总是喜欢自以为是。尤其是在刷题的时候,我们总喜欢说,这题我会,这题我会,然后就被啪啪打脸,打肿的那种。两天不刷题,果然没手感了,还是要坚持学习啊。


打脸实录

题目:

柠檬水找零钱

分析:

问题仔细一看不难,顾客给钱,你找钱。顾客是排队来的,你一开始没本钱,人家给你10块,你就得找五块,人家给你20你就得找15块(一张10块的+一张五块的 or 三张五块的)。结果很清晰,直接上手定义一个result数组来模拟存储你当前有的本钱,一开始就是空的。

代码:

class Solution:
    def lemonadeChange(self, bills) -> bool:
        if len(bills) == 0:
            return True
        if bills[0] != 5:
            return False
        result = []  # 自己手里的钱
        for i in bills:
            if i == 10:  # 10块要找5块
                if result.count(5) != 0:
                    result.remove(5)  # 找五块
                    result.append(10)  # 收十块
                else:
                    return False  # 没有五块找不了了
            if i == 20:  # 20块要找5块10块
                if result.count(5) != 0 and result.count(10) != 0:
                    result.remove(5)  # 找五块
                    result.remove(10)  # 找10块
                    result.append(20)  # 收20块
                elif result.count(5) >= 3:
                    result.remove(5)
                    result.remove(5)
                    result.remove(5)
                    result.append(20)  # 收20块
                else:
                    return False  # 没有五块找不了了
            if i == 5:
                result.append(5)
            print(result)
        else:
            return True


s = Solution()
print(s.lemonadeChange([5, 5, 10, 20, 5, 5, 5, 5, 5, 5, 5, 5, 5, 10, 5, 5, 20, 5, 20, 5]))
# print(s.lemonadeChange([5, 5, 10]))
# print(s.lemonadeChange([10, 10]))
# print(s.lemonadeChange([5, 5, 10, 10, 20]))

结果:

结果

代码分析与优化:

自认为,代码虽然很长但也可以说逻辑清晰,但是结果却令人抓狂。1328ms在这种问题上是无法忍受的。仔细分析看人家大佬的评论才知道,我是多么的年轻。

我为什么要把零钱真的就像是模拟人家的口袋一样存下来,然后每次找钱还需要去口袋里翻着找。一来增加了存储空间,而来多了查找的时间。其实只需要记录一下你有多少张5块的,多少张10块的就好了,单纯的对数字操作,存储空间不大,也不需要查找,害。

大佬代码:

class Solution:
    def lemonadeChange(self, bills: List[int]) -> bool:
        five, ten = 0, 0
        for b in bills:
            if b == 5:
                five += 1
            elif b == 10:
                if not five: return False
                five -= 1
                ten += 1
            else:
                if ten and five:
                    ten -= 1
                    five -= 1
                elif five > 2:
                    five -= 3
                else:
                    return False
        return True

事后烟:

年轻付出了太多代价,但是慢慢也会长大,加油吧。

上一篇 下一篇

猜你喜欢

热点阅读