田忌赛马
题目:
你队伍和另外一个队伍比赛,给你大家的能力值,pk大于+1分,等于不加分,小于-1分,求你们组的最大分
方法:贪心法
思路:其实就是田忌赛马的题,换了个应用场景而已,
分几种情况:
1.如果你的最快马大于另外队最快马,则比
2.如果你的最快马小于另外队最快马,则让你的最慢马跟他的最快马比较
3.如果你的最快马等于它的最快马,则开始比较最慢马,分两种情况
3.1 如果你的最慢马快于它的最慢马,则比较
3.2 如果你的最慢马小于等于它的最慢马,则用你的最慢马和它的最快马比较
代码:
public static void main(String[] args) {List<Integer> list1 = new ArrayList<Integer>();List<Integer> list2 = new ArrayList<Integer>();Scanner in = new Scanner(System.in);int n = in.nextInt();boolean isLast = false;for (int i = 0; i <n ; i++) {list1.add(in.nextInt());}for (int i = 0; i <n ; i++) {list2.add(in.nextInt());}Collections.sort(list1);Collections.sort(list2);int sum = 0;int i=0,j=0,x=n-1,y=n-1;while(!isLast){if(i==x){isLast=true;}if(list1.get(x)>list2.get(y)){//如果田忌当前最好的马可以胜齐王最好的马,那么比一场sum++;x--;y--;}else if(list1.get(x)<list2.get(y)){//如果田忌当前最好的马小于齐王最好的马,用最差的马跟齐王最好马比sum--;y--;i++;}else{//如果田忌当前最好的马等于齐王最好的马,就比较两者最慢的马if(list1.get(i)>list2.get(j)){//如果田忌最差的马大于齐王最差的马,那么比一场sum++;i++;j++;}else{//如果田忌最差的马小于等于齐王最差的马,那么让田忌最差的马跟齐王最好的马比较sum--;i++;y--;}}}System.out.println(sum);}