贪心算法之练习

b站韩顺平看到,自己练习
选择最优的几个电台,覆盖这7个城市

7个城市
北京,上海,天津,广州,深圳,杭州,大连
五个电台
k1
hashSet1.add(“北京”);
hashSet1.add(“上海”);
hashSet1.add(“天津”);
k2
hashSet2.add(“广州”);
hashSet2.add(“北京”);
hashSet2.add(“深圳”);
k3
hashSet3.add(“成都”);
hashSet3.add(“上海”);
hashSet3.add(“杭州”);
k4
hashSet4.add(“上海”);
k5
hashSet5.add(“杭州”);
hashSet5.add(“大连”);

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;

public class Tanxin {
    public static void main(String[] args) {
        HashMap<String, HashSet<String>> broadcasts=new HashMap<String,HashSet<String>>();
        HashSet<String> hashSet1=new HashSet<String>();
        hashSet1.add("北京");
        hashSet1.add("上海");
        hashSet1.add("天津");
        HashSet<String> hashSet2=new HashSet<String>();
        hashSet2.add("广州");
        hashSet2.add("北京");
        hashSet2.add("深圳");
        HashSet<String> hashSet3=new HashSet<String>();
        hashSet3.add("成都");
        hashSet3.add("上海");
        hashSet3.add("杭州");
        HashSet<String> hashSet4=new HashSet<String>();
        hashSet4.add("上海");
        hashSet4.add("天津");
        HashSet<String> hashSet5=new HashSet<String>();
        hashSet5.add("杭州");
        hashSet5.add("大连");
        broadcasts.put("K1",hashSet1);
        broadcasts.put("K2",hashSet2);
        broadcasts.put("K3",hashSet3);
        broadcasts.put("K4",hashSet4);
        broadcasts.put("K5",hashSet5);

        HashSet<String> allAreads=new HashSet<String>();
        allAreads.add("北京");
        allAreads.add("上海");
        allAreads.add("天津");
        allAreads.add("广州");
        allAreads.add("深圳");
        allAreads.add("杭州");
        allAreads.add("大连");

        //存取被选择的key
        ArrayList<String> select=new ArrayList<String>();
        //存取遍历过程中电台覆盖的地区和没有覆盖地区的交际
        HashSet<String> tempset=new HashSet<String>();
        //存储临时变量最大的key用的 看下面
        String maxKey=null;
        while (allAreads.size()!=0)
        {
            //每进行一次while后将maxkey清空
            maxKey=null;
            for(String key:broadcasts.keySet())
            {
                //临时存储的tempset清0
                tempset.clear();
                HashSet<String> areas = broadcasts.get(key);

                tempset.addAll(areas);
                //和allAreads取交集,取出他们都有的城市
                tempset.retainAll(allAreads);
                //tempset.size()>broadcasts.get(key).size() 这步是最关键的 他会判断你选择的电台是不是最好的,你选择的电台覆盖的地区是不是最优的
                //判断你这次遍历选择的覆盖地区的是不是大于上一次选择覆盖的区域,如果大于,就将这次的key赋给maxkey
                if(tempset.size()>0&&(maxKey==null || tempset.size()>broadcasts.get(key).size()))
                {
                    maxKey=key;
                }
            }
            if(maxKey!=null)
            {
                //把最优选择的maxkey存到我们的select集合中
                select.add(maxKey);
                //顺便在未覆盖的城市里面删掉我们已经覆盖的地区
                allAreads.removeAll(broadcasts.get(maxKey));
            }
        }
        System.out.println(select);

    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值