手套_扑克牌大小
手套
不要被这个题目给的测试样例给误导了!
我们是要至少拿多少个手套才可以有一双配对成功!找出一种公式即可!
就是我们一下把左手或者右手的手套都拿走,然后取更小的那个结果 ,结果减去最小值 然后在加1 就可以保证这只手颜色的手套都有!
然后再在另一只手中取一只手套即可!

还有指的注意的是当有一种颜色的手套数为0时,我们不们不能取0为最小值!
import java.util.*; public class Gloves { public int findMinimum(int n, int[] left, int[] right) { // write code here int sum = 0;//保存无法匹配的手套数! int sumleft = 0; //左手手套数! int sumright = 0;//右手手套数! int leftMin = Integer.MAX_VALUE;//保存左右手手套最小值! int rightMin = Integer.MAX_VALUE; for(int i = 0;i<left.length;i++){ if(left[i]*right[i]==0){ //不匹配手套, sum += (left[i]+right[i]); }else{ sumleft += left[i]; sumright += right[i]; if(left[i]<leftMin){ //更新最小值 leftMin = left[i]; } if(right[i]<rightMin){ //更新最小值 rightMin = right[i]; } } } return sum + Math.min(sumleft-leftMin+1,sumright-rightMin+1)+1; } }
扑克牌大小
import java.util.*; public class Main{ public static int comhelp(String[] lefts,int leftLen,String[] rights,int rightLen){ //参照表! String table ="345678910JQKA2jokerJOKER" ; //获取到左右第一张对应牌对应的出现位置下标,根据这个下标比较大小! int l = table.indexOf(lefts[0]); int r = table.indexOf(rights[0]); //左右手牌数量相同! if(leftLen==rightLen){ if(l>r){ return -1;//左手手牌取胜! }else{ return 1; } }else{//手牌数量不相同,大小王比任何牌都大! if(leftLen>1&&lefts[0].equals("joker")&&lefts[1].equals("JOKER")){//可能一方有大小王! return -1;//左手手牌取胜! }else if(rightLen>1&&rights[0].equals("joker")&&rights[1].equals("JOKER")){ return 1;//右手牌取胜! }else if(leftLen==4||rightLen==4){//可能一方有炸! if(leftLen==4){ return -1; }else{ return 1; } } } //判断不了! return 0; } public static void main(String[] args){ Scanner sc = new Scanner(System.in); String str = sc.nextLine(); //通过-将两幅牌划分! String[] strings = str.split("-"); String left = strings[0]; //再次划分 得到 左手手牌数组! String[] lefts = left.split(" "); int leftLen = lefts.length; String right = strings[1]; //再次划分 得到 右手手牌数组! String[] rights = right.split(" "); int rightLen = rights.length; int result = comhelp(lefts,leftLen,rights,rightLen); if(result==-1){ System.out.println(left); }else if(result==1){ System.out.println(right); }else{ System.out.println("ERROR"); } } }