算法题(六十二)头条2017年笔试题——头条校招

版权声明:转载请注明来处 https://blog.csdn.net/qq_24034545/article/details/89479348

题目描述

头条的2017校招开始了!为了这次校招,我们组织了一个规模宏大的出题团队,每个出题人都出了一些有趣的题目,而我们现在想把这些题目组合成若干场考试出来,在选题之前,我们对题目进行了盲审,并定出了每道题的难度系统。一场考试包含3道开放性题目,假设他们的难度从小到大分别为a,b,c,我们希望这3道题能满足下列条件:
a<=b<=c
b-a<=10
c-b<=10
所有出题人一共出了n道开放性题目。现在我们想把这n道题分布到若干场考试中(1场或多场,每道题都必须使用且只能用一次),然而由于上述条件的限制,可能有一些考试没法凑够3道题,因此出题人就需要多出一些适当难度的题目来让每场考试都达到要求,然而我们出题已经出得很累了,你能计算出我们最少还需要再出几道题吗?

输入描述:

输入的第一行包含一个整数n,表示目前已经出好的题目数量。

第二行给出每道题目的难度系数d1,d2,...,dn。 

数据范围

对于30%的数据,1 ≤ n,di ≤ 5;

对于100%的数据,1 ≤ n ≤ 10^5,1 ≤ di ≤ 100。

在样例中,一种可行的方案是添加2个难度分别为20和50的题目,这样可以组合成两场考试:(20 20 23)和(35,40,50)。

输出描述:

输出只包括一行,即所求的答案。

示例1

输入

4  
20 35 23 40

输出

2

分析

判断数之间的差距,需要先把数组从小到大排列。从后向前比较(dis=An - An-1),可能会出现三种情况:

  • dis>20;

在这种情况下,假设算到An时满足有times个数满足条件,由于An与An-1之差大于20,所以需要增加数,则还需要增加3-times个数。比如,5,26,35这三个数,35-26=9,满足条件,需要1个数就能凑成,而26-5大于20,故还需要3-2=1个数。再比如,5,15,36这三个数,35-15=21,因此需要3-1=2个数才能凑成。

  • 10<dis<=20;

这种情况下,只需要增加1个数。如5,15,26这三个数,26-15=11,需要增加1个数,增加后times=3,满足条件。

  • dis<=10;

这种情况下,只需要记录当前已凑成的数(times)即可。

注意,最后还需要判断times是否小于3,如果小于,说明最后还剩下times个数没能凑齐,因此还需要增加3-times个数。比如,5,10,15,20这四个数,前3个数凑成之后,times=1。只剩下5一个数,因此还需要3-times=2个数。

代码

已AC

import java.util.Scanner;
import java.util.Arrays;
public class Main{
    
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        int[] arr = new int[n];
        for(int i=0; i<n; i++){
            arr[i] = input.nextInt();
        }
        Arrays.sort(arr);
        int count = 0;
        int time = 1;
        for(int i=n-1; i>0;i--){
            int dis = arr[i] - arr[i-1];
           if(time<3){
               if(dis<=10){
                   time++;
               }else if(time == 1 && dis <= 20){
                   count++;
                   time=3;
               }else{
                   count += 3-time;
                   time = 1;
               }
           }else{
               time = 1;
           }
        }
        if(time<3){
            count += 3-time;
        }
        System.out.print(count);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_24034545/article/details/89479348