4399 3月19日的java笔试 算法题

三道算题均只能提交样例 思路不一定对

1.有n座基地并排相连,每座基地有一定数额的财宝,对应一定的价值。一个小偷可以拿走任意座基地的财宝,为了不被发现他不能拿走相邻基地的财宝。求出它可以获得的最大财报价值。

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String[] data = in.nextLine().split(",");
        data[data.length - 1] = data[data.length - 1].trim();//去掉最后一个数后可能会有的空格
        int[] nums = new int[data.length + 5];
        for (int i = 0; i < data.length; ++i) {
            nums[i + 1] = Integer.parseInt(data[i]);
        }
        int[] get = new int[data.length + 5];
        int result = 0;
		//首先拿取的基地的价值要相邻周围基地的价值
        for (int i = 1; i <= data.length; ++i) {
            if (nums[i] > nums[i - 1] + nums[i + 1]) {
                result += nums[i];
                get[i] = 1;
            }
        }
		//然后拿取一下剩余还可以拿的其它基地的价值
        for (int i = 1; i <= data.length; ++i) {
            if (get[i] != 1 && get[i - 1] != 1 && get[i + 1] != 1) {
                result += nums[i];
                get[i] = 1;
            }
        }
        System.out.println(result);

    }

2.一个大数a减去一个大数b(a>=b),用字符串来接收数据,然后计算a-b的结果。

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String a=in.next();
        String b=in.next();
        int la=a.length();
        int lb=b.length();
        int[] A=new int[la+1];
        int[] B=new int[lb+1];
        for (int i = 1; i <= la; i++) A[i]=Integer.parseInt(""+a.charAt(i-1));
        for (int i = 1; i <= lb; i++) B[i]=Integer.parseInt(""+b.charAt(i-1));
        int result=0;
        int p=1;
		//手算加减法的模拟
        for (int i = la,j=lb; i >=1&&j>=1; i--,j--) {
            int temp=A[i]-B[j];
            if(temp>=0) result+=p*temp;
            else {
                int k=i-1;
                while (k>=1){
                    if (A[k]>0) {
                        A[k++]--;
                        while(k!=i) {
                            A[k++]+=9;
                        }
                        A[k]+=10;
                        result+=p*(A[k]-B[j]);
                        break;
                    }
                    else --k;
                }
            }
            p=p*10;
        }
        System.out.println(result);

3.有n+1座基地,从0到n编号,从1号基地到n号基地每座基地有一定的高度。一个人位于第0号基地,他的初始能量为E,他需要从0号基地逐个跳到第n号基地。如果下一座要跳的第i号基地的高度比自身的能量E大,那么他会损失(height[i]-E)的能量,反之他会获得(E-height[i])的能量。在跳至n号基地的过程中,他的E值不能为负数,求出满足题意的最小能量值。

public class Main10 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n=in.nextInt();
        int[] height=new int[n+5];
        int maxHeight=0;
        for (int i = 1; i <=n; i++) {
            height[i]=in.nextInt();
            maxHeight=Math.max(maxHeight,height[i]);
        }

		//可以用二分找出满足条件的最小值
        int left=0,right=maxHeight;
        int result=right;
        while (left<right){
            int mid=(left+right)>>1;
            int curE=mid;
            boolean flag=true;
            for(int i=1;i<=n;++i){
                if (mid>=height[i]) mid+=mid-height[i];
                else mid-=height[i]-mid;
                if (mid<0) {
                    flag=false;
                    break;
                }
            }
            if (flag) {
                result=Math.min(result,curE);
                right=mid;
            }else {
                left=curE+1;
            }

        }
        System.out.println(result);
    }

全部评论
大佬,有兴趣投递淘天集团吗?我们服务供应链团队,负责天猫的增值服务相关的内容,实习刚开hc多多!
点赞
送花
回复 分享
发布于 03-20 22:43 浙江

相关推荐

Express.js是一个流行的Node.js&nbsp;Web应用程序框架,它建立在Node.js的HTTP模块之上,并提供了一组简洁、灵活和易于使用的API,用于构建Web应用程序和API。Express.js的特点包括:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&amp;uuid=1730841bd8554b2fa6de4161e81ebb45简洁而灵活:Express.js提供了一组简单而灵活的API,使开发者能够快速构建Web应用程序。它不会强加太多约束,允许开发者自定义和配置应用程序的行为。路由功能:Express.js支持路由功能,使开发者能够定义不同的URL路径和HTTP方法与相应的处理函数之间的映射关系。这样,开发者可以根据请求的URL和HTTP方法,将请求分发到相应的处理函数上进行处理。中间件(Middleware):Express.js中的中间件是一个非常强大且重要的概念。中间件是在请求和响应之间执行的函数,它可以修改请求和响应对象、执行某些特定的任务,或者将控制权传递给下一个中间件。中间件使得可以在请求的不同阶段进行预处理和后处理,例如身份验证、日志记录、错误处理等。视图模板:Express.js支持使用模板引擎来生成动态的HTML(或其他格式)视图。开发者可以选择喜欢的模板引擎(如pug、EJS等),并将其与Express.js集成,以便以一种简单和可维护的方式生成视图。大量的第三方中间件和插件:Express.js生态系统非常丰富,有大量的第三方中间件和插件可供选择。这些中间件和插件可以帮助开发者解决许多常见的任务和问题,例如身份验证、会话管理、数据库集成等。响应处理:Express.js提供了方便的API来处理各种类型的响应,包括JSON数据、静态文件、重定向等。总体而言,Express.js是一个轻量级而强大的Web应用程序框架,它将许多常见的Web开发任务封装为易于使用的API,让开发者可以更专注于业务逻辑的实现而不是底层细节。
点赞 评论 收藏
分享
2 7 评论
分享
牛客网
牛客企业服务