文章目录
总述
贪心算法是一种常用且便携的方法,且通常情况下是有效的。本文中叙述了两个基础且经典的贪心问题—区间选点问题和区间覆盖问题,希望读后有所理解。
题目一:区间选点问题
原题叙述
数轴上有 n 个闭区间 [a_i, b_i]。取尽量少的点,使得每个区间内都至少有一个点(不同区间内含的点可以是同一个)
INPUT
第一行1个整数N(N<=100)
第2~N+1行,每行两个整数a,b(a,b<=100)
OUTPUT
一个整数,代表选点的数目
输入样例
2
1 5
4 6
输出样例
1
题目重述
题意比较简单,给定N个区间,每个区间都要保证至少存在一个点,每个选中的点可以存在于多个区间中,尝试求出满足这个条件需要挑选多少个这样的点。
解题思路
思路概述
一道经典的贪心算法,贪心算法的最核心问题便是贪心规则,确定了贪心规则问题便能轻松的解决。
本题目中选用的贪心规则是依次选择最小的区间上限,依次考虑,如果区间内没有点就将区间的上限选用,直至全部区间被遍历到。
实际的实现思路大概可以描述为:
首先维持一个map[]数组来存放每个点是否被添加过,初始化所有点为0表示没有被添加过,在访问过程中需要添加进去就置为1。
添加一个全局变量
int number=0
作为添加点计数器,每当加入一个新点,计数器++
中间的贪心流程按照下图执行即可:
如果访问到区间的上限还没找到添加过的点,说明这个区间需要新添加一个点进来,为了选用更少点覆盖较大的区间&