502. IPO

502. IPO

  1. 假设 LeetCode 即将开始其 IPO。为了以更高的价格将股票卖给风险投资公司,LeetCode希望在 IPO 之前开展一些项目以增加其资本。 由于资源有限,它只能在 IPO 之前完成最多 k 个不同的项目。帮助 LeetCode 设计完成最多 k 个不同项目后得到最大总资本的方式。
    给定若干个项目。对于每个项目 i,它都有一个纯利润 Pi,并且需要最小的资本 Ci 来启动相应的项目。最初,你有 W 资本。当你完成一个项目时,你将获得纯利润,且利润将被添加到你的总资本中。
    总而言之,从给定项目中选择最多 k 个不同项目的列表,以最大化最终资本,并输出最终可获得的最多资本。
  2. 思路:贪心算法,具体在注释里面。
class Solution:
    def findMaximizedCapital(self, k, W, Profits, Capital):
        """
        :type k: int
        :type W: int
        :type Profits: List[int]
        :type Capital: List[int]
        :rtype: int
        """

        # 这种情况返回全部就好,可以认为一个bug
        if (k==len(Capital)):return W+sum(Profits)

        # 标记已经used的项目索引
        used=[-1]*k

        # 进行k次,每次返回当前所能得到最大利润
        while k>0:
        
            # 一次选择过程中的最大利润
            max_profit=0
            
            for x in range(len(Capital)):
                if W>=Capital[x] and max_profit<Profits[x] and x not in used:
                    max_profit=Profits[x]
                    used[k-1]=x
            W+=max_profit
            k-=1
        return W
  1. 官方给了时间更快的代码
# faster
class Solution:
    def findMaximizedCapital(self, k, W, Profits, Capital):
            heap = []
            projects = sorted(zip(Profits, Capital), key=lambda l: l[1])
            i = 0
            for _ in range(k):
                while i < len(projects) and projects[i][1] <= W:
                    heapq.heappush(heap, -projects[i][0])
                    i += 1
                if heap: W -= heapq.heappop(heap)
            return W

ps: heapq ,zip

### 软件开发中适合描述多条件处理逻辑的工具 在软件开发过程中,当面临需要根据多个条件进行不同处理的情境时,选择恰当的工具至关重要。以下是针对判定表、判定树、IPO图和伪代码这四种工具的特性分析: #### 判定表 判定表是一种强大的工具,特别适用于表达复杂的决策规则[^3]。它通过列出所有可能的条件组合及其对应的动作,确保不会遗漏任何可能性。尽管如此,判定表的一个显著缺点是在条件数目增加时会变得难以管理和阅读,尤其是在条件间存在复杂交互的情况下。 #### 判定树 判定树作为一种图形化的表示方式,非常适合用来展示基于条件分支的处理流程[^1]。相较于判定表,判定树更加直观易懂,特别是对于那些熟悉树状结构的人来说更是如此。它的优点在于能够清晰地呈现从顶层到具体动作的一系列逐步细化的过程。不过,随着条件数目的增多,判定树也可能变得庞大而复杂。 #### IPOIPO(Input-Process-Output)图主要用于概述系统的输入、处理和输出部分的关系。虽然它可以粗略地反映出一些简单的条件分支逻辑,但在应对复杂的多条件情形下显得力不从心。因此,在这种特定的应用场景里,IPO图并不是最优选。 #### 伪代码 伪代码提供了一种介于自然语言和技术编码之间的表述手段,允许开发者以接近编程语法的形式书写算法或业务逻辑[^2]。借助嵌套的`if-then-else`结构或其他控制语句,伪代码可以精确无误地定义每一组条件下的相应措施。然而,过多的嵌套层级可能导致可读性和维护性的下降。 综合考虑以上各点,如果目的是为了找到既能保证准确性又具备良好可视性的解决方案,则**判定树**往往被推荐为首选方案之一[^1]。这是因为判定树不仅能有效地传达信息,而且还能维持较高的可理解度,即使面对较为复杂的条件集也是如此。 ```python def process_decision_tree(condition_a, condition_b): if not condition_a and not condition_b: return 'Action X' elif not condition_a and condition_b: return 'Action Y' elif condition_a and not condition_b: return 'Action Z' else: return 'Default Action' action = process_decision_tree(True, False) print(action) # 输出: Default Action ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值