算法 - 贪心算法(集合覆盖问题求解)

在这里插入图片描述

在这里插入图片描述
1.穷举法
在这里插入图片描述
2.贪心算法
在这里插入图片描述
在这里插入图片描述

遍历集合的key,用当前key的value和allAreas去取交集),然后和(maxKey和allAreas的交集)比较大小,如果当前key的结合size大就把当前key赋给maxkey,循环5次后退出循环,并把maxkey加入到selects,且把maxkey覆盖的地区从allAreas中移除。直到allAreas集合为空退出while循环,得到的select就是所需要的。

package Algorithm.greedy;import java.util.*;public class GreedyAlogrithm {public static void main(String[] args) {//创建广播电台,放入mapHashMap<String, HashSet<String>> broadcasts = new HashMap<>();//将各个电台放入HashSet<String> set1 = new HashSet<>();set1.add("北京");set1.add("上海");set1.add("天津");HashSet<String> set2 = new HashSet<>();set2.add("广州");set2.add("北京");set2.add("深圳");HashSet<String> set3 = new HashSet<>();set3.add("成都");set3.add("上海");set3.add("杭州");HashSet<String> set4 = new HashSet<>();set4.add("上海");set4.add("天津");HashSet<String> set5 = new HashSet<>();set5.add("杭州");set5.add("大连");//加入到mapbroadcasts.put("k1",set1);broadcasts.put("k2",set2);broadcasts.put("k3",set3);broadcasts.put("k4",set4);broadcasts.put("k5",set5);//创建一个存放所有城市的集合,就遍历集合就行HashSet<String> allAreas = new HashSet<>();for(Map.Entry<String, HashSet<String>> entry: broadcasts.entrySet()){HashSet<String> value = entry.getValue();Iterator<String> iterator1 = value.iterator();while (iterator1.hasNext()){allAreas.add(iterator1.next());}}//System.out.println(allAreas);//创建一个ArrayList存放选择后的 电台的集合ArrayList<String> selects = new ArrayList<>();//保存每次 当前覆盖的地区和未覆盖到的地区的交集,用retainAll()方法HashSet<String> tempSet = new HashSet<>();HashSet<String> value = new HashSet<>();//创建一个指针maxKey,存放交集最大的keyString maxKey = null;while (allAreas.size() != 0){ //allAreas 不为空就表示没覆盖到所有地区maxKey = null;for (String key : broadcasts.keySet()) {tempSet.clear();value.clear();//存放Key覆盖的地区value.addAll(broadcasts.get(key));//tempSet.addAll(value);//求当前key覆盖的地区和allAreas的交集value.retainAll(allAreas);//下面两步是取出maxKey覆盖地区和allAreas的交集if (maxKey != null) {tempSet.addAll(broadcasts.get(maxKey));tempSet.retainAll(allAreas);}if (value.size() > 0 && (maxKey == null || (value.size() > tempSet.size()))){maxKey = key;}}if (maxKey != null) {selects.add(maxKey);allAreas.removeAll(broadcasts.get(maxKey));}}System.out.println(selects);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437516.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】使用多个 Azure 订阅(按照订阅收费)

可以在单个 Azure 帐户下创建多个订阅。 这对于企业尤其有用&#xff0c;因为_访问控制_和_计费_在订阅级别发生&#xff0c;而不是在帐户级别发生。 Azure AD 租户和订阅存在多对一的信任关系&#xff1a;一个租户可以与多个 Azure 订阅相关联&#xff0c;但是每个订阅只与一个…

算法 - 普里姆算法(修路问题求解)

从A开始&#xff0c;A作为定点&#xff0c;找到与A相连并且未被处理(不在顶点集合中)的进行处理&#xff0c;找到权值最小的并加入集合&#xff0c;A-C[7]、A-G[2]、A-B[5]&#xff0c;最小的是A-G[2],所以把G加入集合&#xff0c;这里是有A-G的连接的。 然后把A、G作为顶点&a…

二叉树遍历的非递归方法

https://blog.csdn.net/qiuxinfa123/article/details/84880786 2.先序遍历。非递归先序遍历的思路如下&#xff1a; 1.先将根节点入栈 2.访问根节点 3.如果根节点存在右孩子&#xff0c;则将右孩子入栈 4.如果根节点存在左孩子&#xff0c;则将左孩子入栈&#xff08;注意&…

【转】什么是 Azure 资源管理器

什么是 Azure 资源管理器&#xff1f; 2020/09/01 Azure 资源管理器是 Azure 的部署和管理服务。 它提供了一个管理层&#xff0c;用于在 Azure 帐户中创建、更新和删除资源。 部署后&#xff0c;可以使用访问控制、锁和标记等管理功能来保护和组织资源。 若要了解 Azure 资源…

【转】Azure 应用服务计划概述

在应用服务&#xff08;Web 应用、API 应用或移动应用&#xff09;中&#xff0c;应用始终在应用服务计划中运行。 此外&#xff0c;Azure Functions 也可选择在应用服务计划中运行。 应用服务计划为要运行的 Web 应用定义一组计算资源。 这些计算资源类似于传统 Web 托管方案中…

算法 -克鲁斯卡尔算法

如果形成回路则不选择 文字描述 加入的边的两个顶点不能都指向同一个终点&#xff0c;否则会构成回路

【转】Azure基本核心服务计费

虚拟机的计费 您只需花几分钟的时间便可在 Azure 管理平台上&#xff0c;根据您的需求创建从一个到数千个的虚拟机实例。 Azure 支持多种规模的虚拟机&#xff0c;通过支持 Linux, Windows, SQL Server, Oracle 和 SAP 等为客户提供了多种虚拟化的灵活性以实现各种计算解决方…

算法 - 快速幂算法

参考博客 https://blog.csdn.net/qq_19782019/article/details/85621386 简单来说就是进行二分&#xff0c;底数和指数&#xff0c;例如 2的8次方&#xff0c;循环一次变成 2*2的4次方&#xff0c;直到幂 0&#xff1b;&#xff08;注意要区分奇偶&#xff09;&#xff0c;奇…

【转】整整30天终于走完,分享下我的昆山人才引进落户经历

【 摘自昆山论坛网友&#xff1a;苏格拉底的苏 】 落户共用了一个月左右时间&#xff1a; 从10月30号开始&#xff0c;今天11月28号结束。 整整30天&#xff0c;人才引进落户之路终于走完。 速度还是挺快的&#xff0c;其中审核时间花了27天&#xff0c;从11月25日收到复审通过…

学习 - java位运算符

参考博客https://www.cnblogs.com/findbetterme/p/10787118.html

2020-11-04

概括的说&#xff0c;File,FileInfo,FileStream是用于文件 I/O 的类&#xff0c;StreamReader是用于从流读取和写入流的类&#xff0c;使用之前都需using System.IO。 先定义一个TXT文档路径&#xff1a; string txtpath ("D:\C#练习\1.txt"); 要读入这个文档。 (…

Azkaban运行报错:我找到的几个错误问题

ERROR - Failed to build job executor for job xxxxxJob type command ’ is unrecognized. Could not construct 出现上面错误信息&#xff1a;我遇到的bug 1.job文件每行最后末尾看看有没有空格&#xff0c;有空格就出错 我用notepad编辑的打开下面这个 这样就是没空格&a…

【转】MVVM大比拼小结

目前完成4篇源码分析文章&#xff1a; MVVM大比拼之knockout.js源码精析MVVM大比拼之avalon.js源码精析MVVM大比拼之vue.js源码精析MVVM大比拼之AngularJS源码精析 分析所关注的点集中在 &#xff1a;双工绑定的实现机制、视图编译等几个关键点。建议读者从knockout开始按顺序…

Idea Maven报错找不到程序包

程序本来可以运行的好好的&#xff0c;突然不知道什么原因就不行了&#xff0c;两次了 网上找各种方法式&#xff0c;最终两次的解决办法都是同一个&#xff0c;但是什么原因造成的目前并不知道 1.打开Maven 点击Lifecycle下的clean然后点击install 2. 在控制台输入 mvn idea…

【转】C#中StreamWriter与BinaryWriter的区别兼谈编码。

参考&#xff1a; 1. 《C#高级编程》第六版 2. 文件流和数据流-C#程序设计教程 2010-7-11补充&#xff1a; 发现了一篇讲编码的深入而全面的好文章http://www.cnblogs.com/KevinYang/archive/2010/06/18/1760597.html 向文件写入非字符类型数据 当向文件中写入非字符类型的…

WebStrom里设置angular提示,可以在html中提示ts文件的内容

下面这样就是可以提示到 在settings->languages&frameworks->javaScript->Libraries 下把你的工程添加进去 这是我添加进来的&#xff0c;Type类型为project 我改了中文

【转】关于字符编码,你所需要知道的

字符编码的问题看似很小&#xff0c;经常被技术人员忽视&#xff0c;但是很容易导致一些莫名其妙的问题。这里总结了一下字符编码的一些普及性的知识&#xff0c;希望对大家有所帮助。 还是得从ASCII码说起 说到字符编码&#xff0c;不得不说ASCII码的简史。计算机一开始发明…

SuperSet连接Hive失败(客户端报日志拒绝连接)

先上报错&#xff0c;百度无数SuperSet的解决办法整了三四天无果后&#xff0c;打了两天游戏突然想到了个找问题的办法 INFO:thrift.transport.TSocket:Could not connect to (192.168.228.131, 10000) Traceback (most recent call last):File "/opt/module/miniconda3/…

【转】谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词

这是一篇程序员写给程序员的趣味读物。所谓趣味是指可以比较轻松地了解一些原来不清楚的概念&#xff0c;增进知识&#xff0c;类似于打RPG游戏的升级。整理这篇文章的动机是两个问题&#xff1a; 问题一&#xff1a; 使用Windows记事本的“另存为”&#xff0c;可以在GBK、U…

angular8实现对象数组根据某个属性排序(多个也可以)

代码中col是传进来的对象的属性名 toLowerCase()将字符串转换为小写。 arrayInfos是数组&#xff0c;存储的是对象 这里我是配上一个上下切换的箭头使用的&#xff0c;点击切换上下方向并且排序 sort方法排序操作的是原始数组 如果在属性相等的情况下&#xff0c;想根据另…