数据结构与算法(八)贪心算法

简介: 数据结构与算法(八)贪心算法

定义

贪心算法又叫做贪婪算法,它在求解某个问题是,总是做出眼前最大利益。

特点

  • 局部最优解
  • 通过局部最优推出全局最优

习题

  1. 某天早上公司领导找你解决一个问题,明天公司有N个同等级的会议需要使用同一个会议室,现在给你这个N个会议的开始和结束时间,你怎么样安排才能使会议室最大利用?即安排最多场次的会议?
    会议时间:0点~9点 | 8点~10点 | 10点~12点 | 8点到~20点
    思考
    这里先给出解决方案:以结束时间按从小到大排序,就能得出最优解。
    首先为什么开始选择最小的9点而不是10点,由于一天只有24个小时,开始选择9点意味着后面还剩15个小时安排其他会议,而选择10点后面只剩14个小时安排会议,显然15个小时安排更多会议的可能性比14个小时安排更多会议的可能性要大,因此证明开始选择越小的结束时间越好。这里就是它的贪心策略。
    同理可得,当确认第一个之后,后面要选的只要选择开始时间>=前面会议的结束时间&&结束时间更小的那个,因为结束时间更小,给后面预留安排会议的时间越大嘛。以上。

代码

public class Meeting implements Comparable<Meeting> {
    public int number;
    public int startTime;
    public int endTime;
    public Meeting(int number, int startTime, int endTime) {
        this.number = number;
        this.startTime = startTime;
        this.endTime = endTime;
    }
    @Override
    public int compareTo(Meeting o) {
        if (endTime > o.endTime) return 1;
        return -1;
    }
    @Override
    public String toString() {
        return "Meeting{" +
                "number=" + number +
                ", startTime=" + startTime +
                ", endTime=" + endTime +
                '}';
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int next = scanner.nextInt();
        List<Meeting> meetings = new ArrayList<>();
        for (int i = 1; i <= next; i++) {
            int startTime = scanner.nextInt();
            int endTime = scanner.nextInt();
            meetings.add(new Meeting(i, startTime, endTime));
        }
        meetings.sort(null);
        System.out.println(meetings);
        System.out.println("===============");
        int curTime = 0;
        for (Meeting meeting : meetings) {
            if(meeting.startTime>=curTime){
                System.out.println(meeting);
                curTime = meeting.endTime;
            }
        }
    }
}
目录
相关文章
|
20天前
|
存储 算法 关系型数据库
深入理解InnoDB索引数据结构和算法
1. **索引定义**:索引是提升查询速度的有序数据结构,帮助数据库系统快速找到数据。 2. **索引类型**:包括普通索引、唯一索引、主键索引、空间索引和全文索引,每种有特定应用场景。 3. **数据结构**:InnoDB使用B+树作为索引结构,确保所有节点按顺序排列,降低查询时的磁盘I/O。 4. **B+树特性**:所有数据都在叶子节点,非叶子节点仅存储索引,提供高效范围查询。 5. **索引优势**:通过减少查找数据所需的磁盘I/O次数,显著提高查询性能。 **总结:**InnoDB索引通过B+树结构,优化了数据访问,使得查询速度快,尤其适合大数据量的场景。
27 0
深入理解InnoDB索引数据结构和算法
|
24天前
|
存储 算法 Serverless
【C/C++ 数据结构】深入探索数据结构中算法复杂度:从C++和数学的视角
【C/C++ 数据结构】深入探索数据结构中算法复杂度:从C++和数学的视角
46 0
|
12天前
|
存储 算法 索引
【算法与数据结构】队列的实现详解
【算法与数据结构】队列的实现详解
|
16天前
|
算法
【算法与数据结构】二叉树(前中后)序遍历2
【算法与数据结构】二叉树(前中后)序遍历
|
23天前
|
存储 算法 Java
Java数据结构与算法-java数据结构与算法(二)
Java数据结构与算法-java数据结构与算法
66 1
|
12天前
|
算法 索引
【算法与数据结构】深入二叉树实现超详解(全源码优化)
【算法与数据结构】深入二叉树实现超详解(全源码优化)
|
12天前
|
存储 算法
【算法与数据结构】深入解析二叉树(二)之堆结构实现
【算法与数据结构】深入解析二叉树(二)之堆结构实现
|
16天前
|
算法 C语言
【算法与数据结构】 C语言实现单链表队列详解2
【算法与数据结构】 C语言实现单链表队列详解
|
16天前
|
存储 算法 C语言
【算法与数据结构】 C语言实现单链表队列详解1
【算法与数据结构】 C语言实现单链表队列详解
|
16天前
|
存储 缓存 算法
【算法与数据结构】栈的实现详解
【算法与数据结构】栈的实现详解

热门文章

最新文章