一、理解
二、代码
package com.ws.常用算法.贪心算法05;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
public class tanXin {
public static void main(String[] args) {
//创建总数组(电台)
HashMap<String, HashSet<String>> sum=new HashMap<>();
//将各个电台放入
HashSet<String> hashSet1=new HashSet<>();
hashSet1.add("北京");
hashSet1.add("上海");
hashSet1.add("天津");
HashSet<String> hashSet2=new HashSet<>();
hashSet2.add("广州");
hashSet2.add("北京");
hashSet2.add("深圳");
HashSet<String> hashSet3=new HashSet<>();
hashSet3.add("成都");
hashSet3.add("上海");
hashSet3.add("杭州");
HashSet<String> hashSet4=new HashSet<>();
hashSet4.add("上海");
hashSet4.add("天津");
HashSet<String> hashSet5=new HashSet<>();
hashSet5.add("杭州");
hashSet5.add("大连");
//加入到map
sum.put("k1",hashSet1);
sum.put("k2",hashSet2);
sum.put("k3",hashSet3);
sum.put("k4",hashSet4);
sum.put("k5",hashSet5);
HashSet<String> all=new HashSet();
all.add("北京");
all.add("上海");
all.add("天津");
all.add("广州");
all.add("深圳");
all.add("成都");
all.add("杭州");
all.add("大连");
//创建存放选择的集合 选择顺序
ArrayList<String> select = new ArrayList<>();
//存放交集 用于删除all中一样的
HashSet<String> temp=new HashSet<>();
//指向
String maxsize=null;
//存放交集的长度
while (all.size()!=0){
//每次清空指向
maxsize=null;
//遍历k1-k5
for (String k:sum.keySet()){
//清空交集
temp.clear();
//指针遍历,key覆盖区域,那个变色的指针
HashSet<String> ks=sum.get(k);//存放那一行
temp.addAll(ks);//交集数组转存
//求交集
temp.retainAll(all);//交集存档到temp
//当前集合包含未覆盖区域的数量比maxsize 重置 每次选最优的
if(temp.size()>0&&(maxsize==null||temp.size()>sum.get(maxsize).size())){
maxsize=k;
}
}
if (maxsize!=null){
//加入到顺序集合
select.add(maxsize);
//清除指向地区
all.removeAll(sum.get(maxsize));
}
}
System.out.println("得到的结果是:"+select);
}
}
得到的结果是:[k1, k2, k3, k5]