526 · 负载均衡器

526 · 负载均衡器

描述
为网站实现一个负载均衡器,提供如下的 3 个功能:

添加一台新的服务器到整个集群中 => add(server_id)。
从集群中删除一个服务器 => remove(server_id)。
在集群中随机(等概率)选择一个有效的服务器 => pick()。
最开始时,集群中一台服务器都没有。每次 pick() 调用你需要在集群中随机返回一个 server_id。

样例
样例 1:

输入:
add(1)
add(2)
add(3)
pick()
pick()
pick()
pick()
remove(1)
pick()
pick()
pick()
输出:
1
2
1
3
2
3
3
解释: pick() 的返回值是随机的,也可以是 2 3 3 1 3 2 2 或其他的。

public class LoadBalancer {
    int n = 0 ;
    Map<Integer , Integer> pos = new HashMap<>() ;
    List<Integer> array = new ArrayList<>() ;
    Random rand = new Random() ;
    public LoadBalancer() {
        // do intialization if necessary
    }

    /*
     * @param server_id: add a new server to the cluster
     * @return: nothing
     */
    public void add(int server_id) {
        // write your code here
        if(!pos.containsKey(server_id)){
            pos.put(server_id , n) ;
            array.add(server_id) ;
            n++ ;
        }
    }

    /*
     * @param server_id: server_id remove a bad server from the cluster
     * @return: nothing
     */
    public void remove(int server_id) {
        // write your code here
        if(pos.containsKey(server_id)){
            int LastItem = array.get(n-1) ;
            int RemoveIdx = pos.get(server_id) ;
            pos.put(LastItem , RemoveIdx) ;
            array.set(RemoveIdx , LastItem) ;
            pos.remove(server_id) ;
            array.remove(n-1) ;
            n-- ;
        }
    }

    /*
     * @return: pick a server in the cluster randomly with equal probability
     */
    public int pick() {
        // write your code here
        return array.get(rand.nextInt(n)) ;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值