便利蜂20200507笔试题(Java)


第一题是0-1背包问题, 用贪心算法解, 通过14%
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;

public class Main4 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int length = Integer.parseInt(sc.nextLine());
        String [] widthsStr = sc.nextLine().split(",");
        String [] valuesStr = sc.nextLine().split(",");
        sc.close();

        int n = widthsStr.length;
        Commodity [] commodities = new Commodity[n];
        for (int i=0; i<n; i++) {
            Commodity commodity = new Commodity(Integer.parseInt(widthsStr[i]), Integer.parseInt(valuesStr[i]));
            commodities[i] = commodity;
        }
        // 按单位价值从大到小排序
        Arrays.sort(commodities, Collections.reverseOrder());

        int ans = solve(commodities, n, length);
        System.out.println(ans);
    }

    private static int solve(Commodity [] commodities, int n, int length) {
        int tmpLength = length;
        int maxValue = 0;
        for (int i=0; i<n; i++) {
            if (tmpLength - commodities[i].getWidth() < 0)
                continue;
            tmpLength -= commodities[i].getWidth();
            maxValue += commodities[i].getValue();
        }
        return maxValue;
    }
}

class Commodity implements Comparable<Commodity> {
    private double width;
    private double value;
    private double unitValue;

    public Commodity(double width, double value) {
        this.width = width;
        this.value = value;
        this.unitValue = (width == 0) ? 0 : value / width;
    }

    public double getWidth() {
        return width;
    }

    public void setWidth(double width) {
        this.width = width;
    }

    public double getValue() {
        return value;
    }

    public void setValue(double value) {
        this.value = value;
    }

    public double getUnitValue() {
        return unitValue;
    }

    public void setUnitValue(double unitValue) {
        this.unitValue = unitValue;
    } 

    @Override
    public int compareTo(Commodity commodity) {
        double value = commodity.unitValue;
        if (unitValue > value)
            return 1;
        if (unitValue < value)
            return -1;
        return 0;
    }
}
第二题是给一个图像, 问给定的字符串能否在图像中连续
import java.util.Scanner;

public class Main2 {

    static char[][] photo = {
            {'0', '1', 'C', 'H', 'A'},
            {'9', 'E', '7', 'B', 'I'},
            {'K', 'D', '4', '8', 'J'},
            {'6', '5', 'F', 'G', 'O'},
            {'L', 'N', 'M', '2', '3'}};

    static int dx[] = {-1, 0, 1, 0};
    static int dy[] = {0, 1, 0, -1};

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        boolean flag;
        String str;
        while (sc.hasNext()) {
            str = sc.nextLine();
            flag = isLianxu(str);
            if (flag == false) {
                System.out.println("N");
            } else {
                System.out.println("Y");
            }
        }
        sc.close();
    }

    private static boolean isLianxu(String str) {
        char c = str.charAt(0);
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 5; j++) {
                if (c == photo[i][j]) {
                     return dfs(str, 1, i, j);
                }
            }
        }
        return false;
    }

    private static boolean dfs(String str, int index, int i, int j) {
        if (str.length() == index) {
            return true;
        }
        for (int d = 0; d < 4; d++) {
            int x = i + dx[d], y = j + dy[d];
            if (isSafe(x, y) && str.charAt(index)==photo[x][y]) {
                return dfs(str, index+1, x, y);
            }
        }
        return false;
    }

    private static boolean isSafe(int i, int j) {
        if (i >= 0 && i <= 4 && j >= 0 && j <= 4) {
            return true;
        }
        return false;
    }
}
第三题, 字符串解码
import java.util.Scanner;

public class Main1 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        sc.close();
        String ans = method(str);
        System.out.println(ans);
    }

    private static String method(String str) {
        StringBuffer sb = new StringBuffer();
        for (int i=0, j=1; j<str.length(); i=i+2, j=j+2) {
            int count = str.charAt(i) - '0';
            char value = str.charAt(j);
            for (int k=0; k<count; k++) {
                sb.append(value);
            }
        }
        return sb.toString();
    }
}

#便利蜂笔试##笔试题目##便利蜂#
全部评论
第一题真的奇怪,我也是卡了百分之14,改long也不行
点赞 回复 分享
发布于 2020-05-08 00:14
我第一题同14%,我在想是不是输入有问题,我直接输出34都有20多通过率
点赞 回复 分享
发布于 2020-05-07 22:05
我的第一题也是过了14%,想了好久也没解决,感觉就是很简单的01背包问题啊😓
点赞 回复 分享
发布于 2020-05-07 21:19

相关推荐

06-13 17:33
门头沟学院 Java
顺序不记了,大致顺序是这样的,有的相同知识点写分开了1.基本数据类型2.基本数据类型和包装类型的区别3.==和equals区别4.ArrayList与LinkedList区别5.hashmap底层原理,put操作时会发生什么6.说出几种树型数据结构7.B树和B+树区别8.jvm加载类机制9.线程池核心参数10.创建线程池的几种方式11.callable与runnable区别12.线程池怎么回收线程13.redis三剑客14.布隆过滤器原理,不要背八股,说说真正使用时遇到了问题没有(我说没有,不知道该怎么回答了)15.堆的内存结构16.自己在写项目时有没有遇见过oom,如何处理,不要背八股,根据真实经验,我说不会17.redis死锁怎么办,watchdog机制如何发现是否锁过期18.如何避免redis红锁19.一个表性别与年龄如何加索引20.自己的项目的QPS怎么测的,有没有真正遇到大数量表21.说一说泛型22.springboot自动装配原理23.springmvc与springboot区别24.aop使用过嘛?动态代理与静态代理区别25.spring循环依赖怎么解决26.你说用过es,es如何分片,怎么存的数据,1000万条数据怎么写入库中27.你说用limit,那么在数据量大之后,如何优化28.rabbitmq如何批次发送,批量读取,答了延迟队列和线程池,都不对29.计网知不知道smtp协议,不知道写了对不对,完全听懵了30.springcloud知道嘛?只是了解反问1.做什么的?短信服务,信息量能到千万级2.对我的建议,基础不错,但是不要只背八股,多去实际开发中理解。面试官人不错,虽然没露脸,但是中间会引导我回答问题,不会的也只是说对我要求没那么高。面完问我在济宁生活有没有困难,最快什么时候到,让人事给我聊薪资了。下午人事打电话,问我27届的会不会跑路,还在想办法如何使我不跑路,不想扣我薪资等。之后我再联系吧,还挺想去的😭,我真不跑路哥😢附一张河科大幽默大专图,科大就是大专罢了
查看30道真题和解析
点赞 评论 收藏
分享
天天困啊:个人建议第一点就是熟悉Redis这里不要这么写,写上Redis比较核心的技术,什么缓存一致性,雪崩穿透击穿那些,掌握cos其实不用写在专业技能里这个你做了鱼皮的这个项目面试官默认应该认为你应该懂了,鱼皮这个项目核心挺多建议多啃啃,在做一个鱼皮的微服务项目俩项目在一起比较好哦
你的简历改到第几版了
点赞 评论 收藏
分享
评论
1
10
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务