高性能的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; }
#笔试##技术岗笔试题求解#