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

作者: 爱吃西红柿嘛 | 来源:发表于2020-04-21 14:01 被阅读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

事后烟:

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

相关文章

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

    人啊,总是喜欢自以为是。尤其是在刷题的时候,我们总喜欢说,这题我会,这题我会,然后就被啪啪打脸,打肿的那种。两天不...

  • 每日一题20201210(860. 柠檬水找零)

    860. 柠檬水找零[https://leetcode-cn.com/problems/lemonade-chan...

  • 柠檬水找零

    题目: 在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次...

  • 柠檬水找零

    题目 在柠檬水摊上,每一杯柠檬水的售价为 5 美元。 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次...

  • 一起学算法-860. 柠檬水找零

    一、题目 LeetCode-860. 柠檬水找零地址:https://leetcode-cn.com/proble...

  • 【LeetCode】柠檬水找零

    题目描述: 在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)...

  • Day 65: 柠檬水找零

    在柠檬水摊上,每一杯柠檬水的售价为 5 美元。 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一...

  • leetcode 860 柠檬水找零

    这题怎么说,维护五元钞票和十元钞票个数,判断能不能找开就好,纯业务代码!!!可以尝试下dp,题目改一下运行下个人提...

  • 贪心十四:柠檬水找零

    题目地址: https://leetcode-cn.com/problems/lemonade-change/[...

  • LeetCode 柠檬水找零问题

    Record my own stupidity. 20200514 自己的沙雕写法: 因为用到了list.inde...

网友评论

    本文标题:柠檬水找零引起的自信打击

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