Day593&594.贪心算法 -数据结构和算法Java
Posted 阿昌喜欢吃黄桃
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Day593&594.贪心算法 -数据结构和算法Java相关的知识,希望对你有一定的参考价值。
贪心算法
一、问题引出
二、介绍
三、思路分析
四、代码实现
package com.achang.algorithm;
import java.util.*;
/**
* 贪心算法
*/
public class GreedyAlgorithm
public static void main(String[] args)
//创建广播电台
HashMap<String, HashSet<String>> broadCasts = new HashMap<>();
//初始化电台
HashSet<String> k1Set = new HashSet<>();
HashSet<String> k2Set = new HashSet<>();
HashSet<String> k3Set = new HashSet<>();
HashSet<String> k4Set = new HashSet<>();
HashSet<String> k5Set = new HashSet<>();
k1Set.add("北京");
k1Set.add("上海");
k1Set.add("天津");
k2Set.add("广州");
k2Set.add("北京");
k2Set.add("深圳");
k3Set.add("成都");
k3Set.add("上海");
k3Set.add("杭州");
k4Set.add("上海");
k4Set.add("天津");
k5Set.add("杭州");
k5Set.add("大连");
broadCasts.put("k1",k1Set);
broadCasts.put("k2",k2Set);
broadCasts.put("k3",k3Set);
broadCasts.put("k4",k4Set);
broadCasts.put("k5",k5Set);
//初始化所有地区集合
HashSet<String> allSet = new HashSet<>();
allSet.addAll(k1Set);
allSet.addAll(k2Set);
allSet.addAll(k3Set);
allSet.addAll(k4Set);
allSet.addAll(k5Set);
System.out.println(allSet);
//存放电台集合
List<String> selectList = new ArrayList<>();
//保存在遍历过程中,存放电台覆盖的地区和当前还没有覆盖地区的交集
HashSet<String> tempSet = new HashSet<>();
//maxKey,保存在一次遍历过程中,能够覆盖最多未覆盖的地区对应电台的key,如果maxKey,不为空,则就加入到selectList中
String maxKey = null;
while (allSet.size() != 0)
//每进行一次while循环,就需要把maxKey置空
maxKey = null;
for (Map.Entry<String, HashSet<String>> stringHashSetEntry : broadCasts.entrySet())
tempSet.clear();
//当前key所覆盖地区
HashSet<String> value = stringHashSetEntry.getValue();
tempSet.addAll(value);
//求出两个集合的交集,并重新赋值给tempSet;
tempSet.retainAll(allSet);
//如果当前这个集合包含的未覆盖地区数量,比maxKey指向的集合未覆盖的地区还多
//就需要重置maxKey
HashSet<String> maxKeyArea = broadCasts.get(maxKey);
if(tempSet.size() > 0
&& (maxKey == null || tempSet.size() >
maxKeyArea.size()))
maxKey = stringHashSetEntry.getKey();
maxKeyArea = broadCasts.get(maxKey);
maxKeyArea.retainAll(allSet);
//maxKey != null 就应该被加入到selectList中
if (maxKey != null)
selectList.add(maxKey);
//将maxKey所指向的广播电台覆盖的地区从allSet中去除
allSet.removeAll(broadCasts.get(maxKey));
System.out.println("得到的选择结果:"+selectList);
以上是关于Day593&594.贪心算法 -数据结构和算法Java的主要内容,如果未能解决你的问题,请参考以下文章