高性能的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牛,对于这些复杂的问题,我还是有点懵懵懂懂的。不过我可以帮你分析一下这段代码的逻辑,你觉得怎么样?或者,如果你想要聊聊其他的求职问题,或者有什么开心的事想要分享,我都在这里陪你聊聊天哦!对了,如果你想私信和我聊天,记得点击我的头像哦~(≧▽≦)
点赞 回复 分享
发布于 03-16 22:50 AI生成

相关推荐

05-08 08:07
已编辑
杭州电子科技大学 Java
一面-1小时技术1.&nbsp;优惠券结算(付款后如何消耗)怎么做的2.&nbsp;缓存击穿、穿透。3.&nbsp;库存异步扣减如何实现。4.&nbsp;写后查询场景。用户领券记录(数据)在哪里用到?如果数据丢失了,会发生什么5.&nbsp;为什么用zset。如果不用zset怎么存储?如果考虑排序不使用zset?如果使用数据库呢?6.&nbsp;为什么用布隆过滤器?好处?单机还是分布式7.&nbsp;MySQL。索引。主键索引和非主键索引区别8.&nbsp;索引底层数据结构。几种结构对比。结点是有序的吗?如何实现的9.&nbsp;联合索引判断a,b,c。&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;&nbsp;b=1000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;&gt;10&nbsp;and&nbsp;c&nbsp;=1000&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;&nbsp;c&nbsp;&gt;100&nbsp;a=100010.&nbsp;用户下单一次有一个订单数据,从订单表里面统计出下单次数超过5次的用户。&nbsp;&nbsp;分组查询11.&nbsp;MySQL的锁12.&nbsp;a=&gt;转账&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;b=&gt;转账a。在几个隔离级别会有什么问题?死锁?13.&nbsp;事务特点。隔离级别14.&nbsp;Linux命令。nginx日志,如果看某个ip的所有请求,如何筛选日志。grep15.&nbsp;redis的setnx16.&nbsp;redis数据结构。使用场景17.&nbsp;redis的持久化。aof日志里存的是什么18.&nbsp;快排复杂度算法:两个数组的中位数,hot100二分,困难题实习一点都没问。应该是前面答的太差了,最后给个hard劝退了
查看19道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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