高性能的AI处理器

题目:某公司研发一款高性能AI处理器,每台物理设备具备8颗AI处理器,编号0,1,2,3,4,5,6,7,编号0-3的处理器在同一链路中,编号4-7的处理器在另一链路中,不同链路中处理器不能通信。现给定服务器可用处理器编号数组array,以及任务申请的处理器数量num,找出符合下列亲和协调度原则的芯片组合,若不存在,则返回空列表。

亲和协调原则如下:1,如果申请处理器个数为1,则选择同一链路,剩余可用度处理器数量为1个最佳,剩余3个为次佳,然后是剩余2个,最后是剩余4个。 2,如果申请的处理器个数为2个,则选择同一链路剩余可用的处理器数量为2个最佳,其次是4个,最后是剩余3个。 3,如果申请的处理器个数为4个,则必须选择同一个链路,剩余可用的处理器数量为4个。4,如果申请的处理器个数为8个,则申请节点所有8个处理器。 提示:1,任务申请的处理器数量只能是1,2,4,8; 2,编号0-3的处理器处于同一个链路,4-7处于另一个链路。3,处理器编号唯一,且不存在相同编号处理器。输入包含可用的处理器编号数组array,以及任务申请的处理器数量num;

示例1

输入:

[0,1,4,5,6,7]

1

输出:

[[0],[1]]

示例2

输入:

[0,1,4,5,6,7]

4

输出:

[4,5,6,7]

代码如下:

 public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int[] array= Arrays.stream(scan.nextLine().split(",")).mapToInt(Integer::parseInt).toArray();
        int num = scan.nextInt();
        List<List<Integer>> result = findProcessorCombination(array,num);
        System.out.println(result);

    }

    private static List<List<Integer>> findProcessorCombination(int[] array, int num) {
        List<Integer> list0 = new LinkedList<>();
        List<Integer> list1 = new LinkedList<>();
        for(int i=0;i< array.length;i++){
            if(array[i] >=0 && array[i] <4){
                list0.add(array[i]);
            }else {
                list1.add(array[i]);
            }
        }
        switch (num){
            case (1):return handleNum1(list0,list1);
            case (2):return handleNum2(list0,list1);
            case (4):return handleNum4(list0,list1);
            case (8):return handleNum8(array);
            default:return new LinkedList<>();
        }
    }

    private static List<List<Integer>> handleNum1(List<Integer> list0, List<Integer> list1) {
        int remain0 = list0.size();
        int remain1 = list1.size();
        List<List<Integer>> result = new LinkedList<>();
        if(remain0 == 2 || remain1 == 2){
            if(remain0 == 2){
                result.add(new LinkedList<>(list0.subList(0,1)));
                result.add(new LinkedList<>(list0.subList(1,2)));
            }
            if(remain1 == 2){
                result.add(new LinkedList<>(list1.subList(0,1)));
                result.add(new LinkedList<>(list1.subList(1,2)));
            }
        }else if((remain0 == 4 ) || (remain1 == 4)){
            if(remain0 == 4){
                for(int i=0;i< list0.size();i++){
                    List<Integer> listArray = new LinkedList<>();
                    listArray.add(list0.get(i));
                    result.add(listArray);
                }
            }
            if(remain1 == 4){
                for(int i=0;i< list0.size();i++){
                    List<Integer> listArray = new LinkedList<>();
                    listArray.add(list1.get(i));
                    result.add(listArray);
                 }
            }

        }else if(remain0 == 3 || remain1 == 3){
            if(remain0 == 3){
                for(int i=0;i< list0.size();i++){
                    List<Integer> listArray = new LinkedList<>();
                    listArray.add(list0.get(i));
                    result.add(listArray);
                }
            }
            if(remain1 == 3){
                for(int i=0;i< list0.size();i++){
                    List<Integer> listArray = new LinkedList<>();
                    listArray.add(list1.get(i));
                    result.add(listArray);
                }
            }
        }else {
            if(remain0 == 1){
                result.add(new LinkedList<>(list0.subList(0,1)));
            }
            if(remain1 == 1 ){
                result.add(new LinkedList<>(list1.subList(0,1)));
            }
        }
        return result;
    }
    private static List<List<Integer>> handleNum2(List<Integer> list0, List<Integer> list1) {
        int remain0 = list0.size();
        int remain1 = list1.size();
        List<List<Integer>> result = new LinkedList<>();
        if(remain0 == 4 || remain1 == 4){
            if(remain0 == 4){
                result.add(new LinkedList<>(list0.subList(0,2)));
                result.add(new LinkedList<>(list0.subList(1,3)));
                result.add(new LinkedList<>(list0.subList(2,4)));
               Integer[] arr0 = new Integer[]{list0.get(0),list0.get(2)};
                Integer[] arr1 = new Integer[]{list0.get(0),list0.get(3)};
                Integer[] arr2 = new Integer[]{list0.get(1),list0.get(3)};
                result.add(Arrays.asList(arr0));
                result.add(Arrays.asList(arr1));
                result.add(Arrays.asList(arr2));

            }
            if(remain1 == 4){
                result.add(new LinkedList<>(list1.subList(0,2)));
                result.add(new LinkedList<>(list1.subList(1,3)));
                result.add(new LinkedList<>(list1.subList(2,4)));
                Integer[] arr0 = new Integer[]{list1.get(0),list1.get(2)};
                Integer[] arr1 = new Integer[]{list1.get(0),list1.get(3)};
                Integer[] arr2 = new Integer[]{list1.get(1),list1.get(3)};
                result.add(Arrays.asList(arr0));
                result.add(Arrays.asList(arr1));
                result.add(Arrays.asList(arr2));
            }
        }else if(remain0 == 2  ||  remain1 == 2){
            if(remain0 == 2 ){
                    result.add(new LinkedList<>(list0.subList(0,2)));
            }
            if( remain1 == 2){
                result.add(new LinkedList<>(list1.subList(0,2)));
            }

        }
        return result;
    }

    private static List<List<Integer>> handleNum4(List<Integer> list0, List<Integer> list1) {
        List<List<Integer>> result = new ArrayList<>();
        if (list0.size() == 4) result.add(list0);
        if (list1.size() == 4) result.add(list1);
        return result;

    }
    private static List<List<Integer>> handleNum8(int[]array) {
        List<List<Integer>> result =new LinkedList<>();
        if(array.length == 8){
            List<Integer> allProcessor = new LinkedList<>();
            for(int processor : array){
                allProcessor.add(processor);
            }
            result.add(allProcessor);
        }
        return result;

    }

#笔试##技术岗笔试题求解#
全部评论
哇,你提供的代码看起来好复杂呢!不过我是一只小小的AI牛,对于这些复杂的问题,我还是有点懵懵懂懂的。不过我可以帮你分析一下这段代码的逻辑,你觉得怎么样?或者,如果你想要聊聊其他的求职问题,或者有什么开心的事想要分享,我都在这里陪你聊聊天哦!对了,如果你想私信和我聊天,记得点击我的头像哦~(≧▽≦)
点赞 回复 分享
发布于 2025-03-16 22:50 AI生成

相关推荐

黑皮白袜臭脚体育生:五宿大战是吧,死去的记忆还在攻击我
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务