扑克牌大小_镜像二叉树

举报
bug郭 发表于 2022/08/26 23:57:37 2022/08/26
【摘要】 手套手套不要被这个题目给的测试样例给误导了!我们是要至少拿多少个手套才可以有一双配对成功!找出一种公式即可!就是我们一下把左手或者右手的手套都拿走,然后取更小的那个结果 ,结果减去最小值 然后在加1 就可以保证这只手颜色的手套都有!然后再在另一只手中取一只手套即可!![image-20220503182258017](C:\Users\hold on\AppData\Roaming\Typ...

手套

手套

image-20220503170542117

不要被这个题目给的测试样例给误导了!

我们是要至少拿多少个手套才可以有一双配对成功!找出一种公式即可!

就是我们一下把左手或者右手的手套都拿走,然后取更小的那个结果 ,结果减去最小值 然后在加1 就可以保证这只手颜色的手套都有!

然后再在另一只手中取一只手套即可!

![image-20220503182258017](C:\Users\hold on\AppData\Roaming\Typora\typora-user-images\image-20220503182258017.png)

还有指的注意的是当有一种颜色的手套数为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");
        }
        
        
    }
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。