Set的使用 --《算法图解》

交集、并集、差集

var s1=new Set(['a','b','c','v']);
var s2=new Set(['a','c','f','h']);
//获得交集
var co=new Set([...s1].filter(item=>s2.has(item)));
console.log(co);

//获得并集
var binji=new Set([...s1,...s2]);
console.log(binji);

//获得差集
var diff=new Set([...s1].filter(item =>!s2.has(item)));
console.log(diff);

《算法图解》中,用贪心算法,得到用最少的电台,覆盖全美50个州
思路,每次获取覆盖州最多的电台,直到覆盖完毕,即使覆盖了已经被覆盖的
使用散列表来存储每个电台,可以覆盖的州

//贪心算法 选出一个广播台 它覆盖最多的未覆盖的州,即使这个广播台覆盖了一些已覆盖的州
let states_need = new Set(['mt', 'wa', 'or', 'id', 'nv', 'ut', 'ca', 'az']);
// console.log(states_need);
let stations = new Map();
stations.set('kone', new Set(['id', 'nv', 'ut']));
stations.set('ktwo', new Set(['wa', 'id', 'mt']));
stations.set('kthree', new Set(['or', 'nv', 'ca']));
stations.set('kfour', new Set(['nv', 'ut']));
stations.set('kfive', new Set(['ca', 'az']));
//最终得到的电台
let final_stations=[];
//只要州还没被覆盖完,就要继续遍历
while(states_need.size!== 0){
    //每次遍历选出覆盖最多的电台
	let best_station='';
	//广播台覆盖的所有未覆盖的州
	let cover_state=new Set();
	for(let [station,state] of stations){
	//求交集,未覆盖的州和当前电台下覆盖州的交集
		let cover=new Set([...states_need].filter(item=>state.has(item))) 
		//只要这次的覆盖州比上次电台覆盖州多,就更新best_sattions直到循环结束
		if(cover.size >cover_state.size){
			best_station=station;
			cover_state=cover;
		}
	}
	//更新未覆盖的州
	//求差集
	states_need=new Set([...states_need].filter(item=>!cover_state.has(item)));
	final_stations.push(best_station);
}
console.log(final_stations);

在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值