zoukankan      html  css  js  c++  java
  • 几道经典的贪心算法实现

    参考链接:https://blog.csdn.net/weixin_43201538/article/details/86769803
    看来左神的算法视频, 其中他总结了几道经典的贪心算法, 但是牛客网没有相应的题目, 就自己找了一下, 用python实现了.
    题目1. 切金条
    题目2. IPO项目
    题目3. 会议室安排

    题目1. 切金条

    一块金条切成两半,是需要花费和长度数值一样的铜板的。比如长度为20的金条,不管切成长度多大的两半,都要花费20个铜板。一群人想整分整块金 条,怎么分最省铜板?
    例如,给定数组{10,20,30},代表一共三个人,整块金条长度为10+20+30=60. 金条要分成10,20,30三个部分。 如果, 先把长度60的金条分成10和50,花费60 再把长度50的金条分成20和30,花费50 一共花费110铜板。
    但是如果, 先把长度60的金条分成30和30,花费60 再把长度30金条分成10和20,花费30 一共花费90铜板。
    输入一个数组,返回分割的最小代价.
    代码链接: https://github.com/20130353/Leetcode/blob/master/target_offer/切金条

    题目2. IPO项目


    解题关键是:每次从能做的项目中找到收益最大的一个
    在代码实现时,就是准备一个最小堆(用来排序每个项目的启动资金 从小到大排),全部项目信息装入这个堆中。 再准备一个最大堆(用来排序每个项目的收益 从大到小排)可以做的项目装入这个堆中,每次做的是这个堆顶的项目,也就是收益最大的项目。 直到循环够了k次,或者最小堆中没有元素可以放入最大堆了就停。
    代码链接: https://github.com/20130353/Leetcode/blob/master/target_offer/IPO项目
    因为python3的heapq结构不能直接存储结构体(类),所以我用map保存了对应的数据.

    题目3. 会议室安排

    [题目描述]

    在大公司里,会议是很多的,开会得有场子,要场子你得先在电子流里预订。
    如果你是项目组新来的小弟,那么恭喜你,每天抢订会议室的任务就光荣的分给你了。
    老大要求你尽可能多的订会议室,但是这些会议室之间不能有时间冲突。

    [Input]
    input文件中可以包括多个测试案例。
    T(T ≤ 20),输入文件的第一行表示文件中有多少个测试案例。
    N(1 ≤ N ≤ 500),每个测试案例的第一行表示会议室的数目。
    每个测试案例中,除第一行以外表示各个会议室的信息。每行会有3个数字,分别表示会议编号、会议起始时间、会议结束时间。

    [Output]
    输出可以安排的最大会议数目
    [I/O Example]
    Input
    2
    6
    1 1 10
    2 5 6
    3 13 15
    4 14 17
    5 8 14
    6 3 12
    15
    1 4 8
    2 2 5
    3 2 6
    4 4 6
    5 2 3
    6 1 6
    7 4 7
    8 3 5
    9 3 8
    10 1 2
    11 1 7
    12 2 4
    13 5 6
    14 4 5
    15 7 8

    Output
    3
    5
    解题关键: 谁先结束就排谁
    代码链接:https://github.com/20130353/Leetcode/blob/master/target_offer/安排会议室

  • 相关阅读:
    TCP/IP三次握手四次挥手
    注解(JDK1.5之后)
    枚举(JDK1.5之后)
    局部内部类
    非静态内部类
    静态内部类
    匿名内部类
    接口
    根父类:java.lang.Object
    native关键字
  • 原文地址:https://www.cnblogs.com/x739400043/p/11163636.html
Copyright © 2011-2022 走看看