9.7 去哪网后端Java笔试

1.舞蹈选动作----01背包
public class Main1 {
    public int maxScore(int energy, int[][] actions) {
        // write code here  action[0]体力 action【1】分数
        int[] dp = new int[energy + 1];//dp[i]表示体力为i的最大得分
        for (int[] action : actions) {
            for (int i = energy; i >= action[0]; i--) {
                if (i - action[0] >= 0) {
                    dp[i] = Math.max(dp[i], dp[i - action[0]] + action[1]);
                }
            }
        }
        return dp[energy];
    }
}
2.解密----分治(a*b)%c =(a%c *b%c)%c
推导 令 a=n1*c+m1 ,b=n2*c+m2 ,(a*b)%c=(n1*n2*c^2+(n1m2+n2m1)*c+m1*m2)/c 取余数,显然多项式前两项可以整除,所以只剩下m1*m2,防止超过c,再去一次模,即(m1*m2)%c;
public class Main2 {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 解密
     * @param encryptedNumber int整型 待解密数字
     * @param decryption int整型 私钥参数D
     * @param number int整型 私钥参数N
     * @return int整型
     */

    public int Decrypt (int encryptedNumber, int decryption, int number) {
        // write code here
        if(decryption==2||decryption==1) return  ((int)Math.pow(encryptedNumber,decryption))%number;
        return (Decrypt(encryptedNumber, decryption/2, number)*Decrypt(encryptedNumber, decryption-decryption/2, number))%number;
    }
}
3.打牌   89%
package quna_code;

import java.util.HashMap;
import java.util.HashSet;

public class Main3 {
    public String showDown (String inHand) {
        // write code here
        String[] strings = inHand.split(" ");
        int[][] pokes = new int[15][4];
        int[] counts = new int[15];
        int[] colors = new int[4];
        HashMap<Integer, HashSet<Character>> map = new HashMap<>();
        for (String string : strings) {
            int order = getOrder(string.substring(1));
            int color = getColor(string.charAt(0));
            pokes[order][color]=1;
            counts[order]++;
            colors[color]++;
            HashSet<Character> set = map.getOrDefault(order, new HashSet<>());
            set.add(string.charAt(0));
            map.put(order,set);
            if(order==1){
                pokes[14][color]=1;
                counts[14]++;
                HashSet<Character> set2 = map.getOrDefault(14, new HashSet<>());
                set2.add(string.charAt(0));
                map.put(14,set2);
            }
        }
        int end = isShun(counts);
        int colorCount=0;
        for (int color : colors) {
            colorCount= Math.max(colorCount,color);
        }
        int maxCount=0;
        int count2=0;
        for (int count : counts) {
            maxCount= Math.max(maxCount,count);
            if(count==2) count2++;
        }
        if( end>0){
            if(isTonghua(pokes,end,map)){
                if(end==14){
                    return "HuangJiaTongHuaShun";
                }
                return "TongHuaShun";
            }
            if(maxCount==4){
                return "SiTiao";
            } else if (maxCount==3&&count2==1) {
                return "HuLu";
            } else if (maxCount==3) {
                return "SanTiao";
            }
            if(colorCount==5){
                return "TongHua";
            }
            return "ShunZi";
        }
        if(colorCount==5){
            return "TongHua";
        }
        if(maxCount==4){
            return "SiTiao";
        } else if (maxCount==3&&count2==1) {
            return "HuLu";
        }else if (maxCount==3) {
            return "SanTiao";
        }
        if(count2==2){
            return "LiangDui";
        } else if (count2==1) {
            return "YiDui";
        }
        return "GaoPai";
    }
    int isShun(int[] counts){
       int count=0;
       int end=0;
        for (int i = counts.length-1; i >=0 ; i--) {
            if(counts[i]>0){
                if(count==0){
                    end=i;
                }
                count++;
                if(count==5) return end;
            }
            if(counts[i]==0){
                count=0;
            }
        }
        return -1;
    }
    boolean isTonghua(int[][] pokes,int end,HashMap<Integer,HashSet<Character>> map){
        boolean flag1=true;
        boolean flag2=true;
        boolean flag3=true;
        boolean flag4=true;
        char a='S';
        char b='H';
        char c='C';
        char d='D';
        for (int i = end-4; i <=end ; i++) {
            if(!map.get(i).contains(a)){
                flag1=false;
                break;
            }
        }
        for (int i = end-4; i <=end ; i++) {
            if(!map.get(i).contains(b)){
                flag2=false;
                break;
            }
        }
        for (int i = end-4; i <=end ; i++) {
            if(!map.get(i).contains(c)){
                flag3=false;
                break;
            }
        }
        for (int i = end-4; i <=end ; i++) {
            if(!map.get(i).contains(d)){
                flag4=false;
                break;
            }
        }
        return flag1||flag2||flag3||flag4;
    }

    int getColor(char a){
        switch (a){
            case 'S':
                return 0;
            case 'H':
                return 1;
            case 'C':
                return 2;
            case 'D':
                return 3;
        }
        return 0;
    }
    int getOrder(String b){
        if(b.length()==1){
            char a=b.charAt(0);
            if(Character.isDigit(a)) return a-'0';
            switch (a){
                case 'A':
                    return 1;
                case 'J':
                    return 11;
                case 'Q':
                    return 12;
                case 'K':
                    return 13;
            }
        }
        return 10;
    }
}





#去哪网#
全部评论
先收藏一下,感谢分享
点赞 回复 分享
发布于 2022-10-08 12:35 陕西

相关推荐

TimeLine:&nbsp;2.26&nbsp;一面、2.28&nbsp;二面、3.9笔试、3.17三面、3.21&nbsp;hr&nbsp;面一面【90分钟】1.&nbsp;自我介绍2.&nbsp;问学习成绩&nbsp;+问什么选后端,不选择算法3.&nbsp;实习(主要问了美团的需求)4.&nbsp;接口&nbsp;VS&nbsp;抽象类5.&nbsp;HashMap6.&nbsp;volatile如何实现可见性和有序性7.&nbsp;线上&nbsp;CPU&nbsp;占用过高怎么排查【top&nbsp;+&nbsp;jstat&nbsp;+&nbsp;jmap&nbsp;+&nbsp;jstack】8.&nbsp;HTTP&nbsp;状态码【1XX&nbsp;~&nbsp;5XX】9.&nbsp;explain&nbsp;参数10.&nbsp;Redis&nbsp;怎么样可以批次操作【mget、mset&nbsp;/&nbsp;pipeline&nbsp;/&nbsp;lua】11.&nbsp;AOP&nbsp;原理&nbsp;+&nbsp;静态代理&nbsp;/&nbsp;动态代理12.&nbsp;SQL题:找出总分前10的同学的姓名和总分13.&nbsp;算法【从一个文件读取字符串,然后将所有字符串按照倒数第二个位置排序的方式进行排序,再写入另一个文件,不能使用&nbsp;java&nbsp;内置&nbsp;sort&nbsp;函数】【感觉主要注意下文件读写,然后用快排就行】&nbsp;&nbsp;&nbsp;&nbsp;二面【90分钟】1.&nbsp;自我介绍2.&nbsp;12306项目【真没想到,没有问实习项目hhhh】3.&nbsp;HashMap4.&nbsp;乐观锁&nbsp;/&nbsp;悲观锁,举出一个例子【我说了&nbsp;ConcurrentHashMap】5.&nbsp;String&nbsp;a&nbsp;=&nbsp;“123”,&nbsp;String&nbsp;b&nbsp;=&nbsp;new&nbsp;String(”456”),&nbsp;String&nbsp;c&nbsp;=&nbsp;a&nbsp;+&nbsp;b,对&nbsp;JVM&nbsp;来说做了什么【a&nbsp;在字符串常量池、b&nbsp;在堆和字符串常量池、c&nbsp;在堆】6.&nbsp;Java&nbsp;内存区域7.&nbsp;如果有一个特别大的对象,我想直接&nbsp;GC&nbsp;掉,我可以怎么做【讲了&nbsp;G1&nbsp;GC&nbsp;中对巨型对象的处理方式、然后说了可以直接&nbsp;System.gc()&nbsp;掉】8.&nbsp;联合索引,创建联合索引需要注意什么【最左匹配&nbsp;+&nbsp;把区分度大的放在前面】,a=x、a=x,b=y、a=x,b=y,c=z,怎么建立索引【a,b,c】9.&nbsp;mysql&nbsp;想要删除数据怎么做【delete、软删、truncate、drop】,讲讲上面四种的原理10.&nbsp;如何设计全局&nbsp;ID【雪花算法、美团&nbsp;Leaf、时钟回拨问题】11.&nbsp;算法【内存&nbsp;4&nbsp;G,有一个&nbsp;500&nbsp;G文件,请你找出出现次数&nbsp;top100&nbsp;的元素】【写两个方法,一个把文件分片,一个方法使用一个&nbsp;map&nbsp;存储&nbsp;string&nbsp;和出现次数,使用全局堆进行筛选就行】三面【45分钟】1.&nbsp;自我介绍2.&nbsp;学习情况、实习情况、获奖情况、导师课题情况闲聊3.&nbsp;Java&nbsp;出现&nbsp;OOM&nbsp;有哪些原因4.&nbsp;有没有实际的&nbsp;Java&nbsp;调优经历5.&nbsp;自己对生成式&nbsp;AI&nbsp;方面有什么见解6.&nbsp;面试官介绍部门&nbsp;+&nbsp;未来如果进到部门,未来几年的培养计划HR面【30分钟】1.&nbsp;自我介绍2.&nbsp;讲一讲每一段实习3.&nbsp;在美团遇到最大的挑战是什么4.&nbsp;互联网公司实习对你有什么样的提升5.&nbsp;学习成绩6.&nbsp;开源经历7.&nbsp;自己对最近的&nbsp;AGI&nbsp;有什么看法8.&nbsp;什么时候能来实习许愿OC,希望能通过!#阿里云##阿里##许愿##offer##面经#
点赞 评论 收藏
分享
评论
点赞
4
分享

创作者周榜

更多
牛客网
牛客企业服务