zoukankan      html  css  js  c++  java
  • 字符串子串(网易2017春招笔试题)

    字符串子串(网易2017春招笔试题)

    题目:


    一种双核CPU的两个核能够同时的处理任务,现在有n个已知数据量的任务需要交给CPU处理,假设已知CPU的每个核1秒可以处理1kb,每个核同时只能处理一项任务。n个任务可以按照任意顺序放入CPU进行处理,现在需要设计一个方案让CPU处理完这批任务所需的时间最少,求这个最小的时间。 


    输入描述:


    输入包括两行:

    第一行为整数n(1 ≤ n ≤ 50)

    第二行为n个整数length[i](1024 ≤ length[i] ≤ 4194304),表示每个任务的长度为length[i]kb,每个数均为1024的倍数。


    输出描述:


    输出一个整数,表示最少需要处理的时间


    输入例子1:


    5

    3072 3072 7168 3072 1024


    输出例子1:


    9216



    java版本的代码实现:
    package cn.cat.test;
    
    import java.util.Arrays;
    
    public class Test {
    	public static void main(String[] args) {
    		int[] tasks = new int[]{3072, 3072, 7168, 3072, 1024};
    		Arrays.sort(tasks);
    		//最末尾的元素索引
    		int lastIndex = tasks.length - 1;
    		if (lastIndex <= 2) {
    			System.out.println("双核CPU并行处理的最小时间为:" + (tasks[lastIndex] / 1024) );
    			return;
    		}
    		
    		int maxAvg = tasks[lastIndex];
    		int minAvg = tasks[lastIndex - 1];
    		int temp;
    		for (int i = lastIndex - 2; i >= 0; i--) {
    			if ((minAvg + tasks[i]) < (maxAvg + tasks[i])) {
    				minAvg += tasks[i];
    			} else {
    				maxAvg += tasks[i];
    			}
    			
    			if (minAvg > maxAvg) {
    				temp = maxAvg;
    				maxAvg = minAvg;
    				minAvg = temp;
    			}
    		}
    		System.out.println(String.format("细分为两个组,任务量分别为%d, %d , 双核CPU并行处理的最小时间为: %d", 
    				minAvg, maxAvg, (maxAvg / 1024)));
    	}
    }
    



  • 相关阅读:
    219. Contains Duplicate II
    189. Rotate Array
    169. Majority Element
    122. Best Time to Buy and Sell Stock II
    121. Best Time to Buy and Sell Stock
    119. Pascal's Triangle II
    118. Pascal's Triangle
    88. Merge Sorted Array
    53. Maximum Subarray
    CodeForces 359D Pair of Numbers (暴力)
  • 原文地址:https://www.cnblogs.com/catgwj/p/7492827.html
Copyright © 2011-2022 走看看