lendinghome oa 准备

hardcode版本 估计只能过一个吧

import java.util.*;

public class NextServer {
    Map<Integer, Integer> serverCount = new HashMap<Integer, Integer>();
    //serverNum uses this, so defined by myself, according to his input,wrong
    //int[] serverNums = {1,2,3};
    int[] serverNums = {0};

    int next_server_number(int[] serverNums) {
        int len = serverNums.length;
        Arrays.sort(serverNums);
        for (int i = 0; i < serverNums.length; i++) {
            if (!serverCount.containsKey(serverNums[i]))
                serverCount.put(serverNums[i], 1);
            else serverCount.put(serverNums[i], serverCount.get(serverNums[i]) + 1);
        }
        int max = serverNums[len - 1];
        int result = max + 1;
        for (int j = 1; j < max; j++) {
            //System.out.println("j = " + j);
            if (!serverCount.containsKey(j)) {
                result = j;
                //System.out.println("result = " + result);
                break;
            }
        }
        return result;
    }

    String allocate(String hostType) {
        int serverNum = next_server_number(serverNums);
        if (serverCount.containsKey(serverNum) && serverCount.get(serverNum) > 1)
            serverCount.put(serverNum, serverCount.get(serverNum) - 1);
        if (serverCount.containsKey(serverNum) && serverCount.get(serverNum) == 1)
            serverCount.remove(serverNum, 1);
        //serverNum is wrong
        return hostType + String.valueOf(serverNum);
    }

    void deallocate(String hostType) {
        int serverNum = Integer.valueOf(hostType.charAt(hostType.length() - 1));
        if (!serverCount.containsKey(serverNum))
            serverCount.put(serverNum, 1);
        else serverCount.put(serverNum, serverCount.get(serverNum) + 1);
    }

    public static void main(String args[]) { 
        NextServer ns = new NextServer();
        String[] input = {"next 1 2 3","next","allocate banana","dealocate banana1"};
        for (int i = 0; i < input.length; i++) {
            if (input[i].contains("next")) {
                if (input[i].length() == 4)
                    System.out.println(1);
                else if (input[i].length() > 4) {
                    String[] temp = input[i].split("\\s+");
                    int[] numbers = new int[temp.length - 1];
                    for (int j = 1; j < temp.length; j++) {
                        numbers[j - 1] = Integer.valueOf(temp[j]);
                    }
                    System.out.println(ns.next_server_number(numbers));
                }
            }else if (input[i].contains("allocate")) {
                System.out.println(ns.allocate(input[i]));
            }else if (input[i].contains("deallocate")) {
                ns.deallocate(input[i]);
            }
        }
    }
}
View Code

猜你喜欢

转载自www.cnblogs.com/immiao0319/p/9746153.html
OA