京东2016实习生招聘
C++开发工程师
在线考试
编程题
30分
2/2
选举游戏
Problem Description:
小东和其他小朋友正在玩一个关于选举的游戏。选举是通过投票的方式进行的,得票最多的人将获胜。
小东是编号为1的候选者,此外还有其他的候选者参加选举。根据初步的调查情况,所有准备投票的小朋友都有一定的投票倾向性,小东如果要获得胜利,必须争取部分准备为其他候选人投票的小朋友。由于小东的资源较为有限,她希望用最小的代价赢得胜利,请你帮忙计算她最少需要争取的选票数。
输入
输入有若干组,每组包含两行,第一行为一个正整数n(2<=n<=100),表示候选者的数量,第二行为每个候选人预期得到的选票数,以空格分开,每人的预期得票数在1到1000之间(包含1和1000)。
经过小东的争取后,可能出现候选人得票数为0或超过1000的情况。
输出
对每组测试数据,单独输出一行,内容为小东最少需要争取的选票数。
样例输入
5
5 1 11 2 8
4
1 8 8 8
2
7 6
样例输出
4
6
0
import java.util.Arrays;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int n=sc.nextInt();
int[] votes=new int[n];
for(int i=0;i<n;i++){
votes[i]=sc.nextInt();
}
getResult(votes);
}
sc.close();
}
public static void getResult(int [] result){
int xiaodong=result[0];
int count=0;
int length=result.length-1;
int [] others=new int[result.length-1];
for(int i=0;i<result.length-1;i++){
others[i]=result[i+1];
}
Arrays.sort(others);
while(xiaodong<=others[length-1]){
count++;
xiaodong++;
others[length-1]--;
Arrays.sort(others);
}
System.out.println(count);
}
}
用了自带的排序,肯定不是最优的,可以把arrays.sort那里换成求最大即可,时间复杂度小于N(O^2)