字节跳动-第二题公园修路(动态规划)

第一次提交提交的是递归解法,递归解法时间复杂度太高,50%
dp后面改出来的,改完才发现已自动交卷了

N=4个点对他们编号【0,1,2,3】
第一种 0-1连接 前面剩余0个点 1种连接方法,后面剩余2个点 1种连接方法 1*1
第二种 0-3连接 前面剩余2个点 1种连接方法,后面剩余0个点 1种连接方法 1*1
共计2种

N=6个点对他们编号【0,1,2,3,4,5】
第一种 0-1连接 前面剩余0个点 1种连接方法,后面剩余4个点 2种连接方法 2*1
第二种 0-3连接 前面剩余2个点 1种连接方法,后面剩余2个点 1种连接方法 1*1
第三种 0-5连接 前面剩余4个点 2种连接方法,后面剩余0个点 1种连接方法 2*1
共计5种

N个点对他们编号【0,1,2,3,4,5,...,N-1】
第一种 0-1连接 前面剩余0个点 1种连接方法,后面剩余N-2个点  dp[0]*dp[N-2]
第二种 0-3连接 前面剩余2个点 1种连接方法,后面剩余N-4个点  dp[2]*dp[N-4]
第三种 0-5连接 前面剩余4个点 2种连接方法,后面剩余N-6个点  dp[4]*dp[N-6]
......

第三种 0-N-1连接 前面剩余N-2个点,后面剩余0个点 1种连接方法 dp[N-2]*dp[0]
dp[0]=1
dp[2]=1
dp[4]=dp[0]*dp[2] dp[2]*dp[0]
dp[6]=dp[0]*dp[4] dp[2]*dp[2] dp[4]dp[0]
package algorithm.bytecode;

import java.util.Scanner;

public class Second {
    static long MOD=1000000007L;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String mStr=in.nextLine();
        int m=Integer.valueOf(mStr);
        long s1=System.currentTimeMillis();
        long r1=solution(m);
        long e2=System.currentTimeMillis();
        System.out.println(e2-s1);
        System.out.println(r1);

        long start=System.currentTimeMillis();
        long r2=recursiveSolution(m);
        long end=System.currentTimeMillis();
        System.out.println(end-start);
        System.out.println(r2);
    }

    public static long solution(int n){
        if(n==0){
            return 1;
        }
        if(n==2){
            return 1;
        }
        long[] data=new long[n 1];
        data[0]=1;
        data[2]=1;

        for(int i=4;i<=n;i =2){
            long temp=0;
            for(int j=0;j<i;j =2){
                temp=(temp data[j]*data[i-j-2])%MOD;
            }
            data[i]=temp;

        }
        return data[n];

    }

    public static long recursiveSolution(int n){
        if(n==0){
            return 1;
        }
        if(n==2){
            return 1;
        }

        long count=0;
        for(int i=1;i<n;i =2){
            long left=solution(i-1)%MOD;
            long right=solution(n-i-1)%MOD;
            count=(left*right count)%MOD;
        }
        return count;

    }

}




#字节跳动##笔试题目##秋招#
全部评论
和我一样啊,我也没时间改成动态规划了
点赞 回复 分享
发布于 2019-08-25 21:59
也是50%正确率
点赞 回复 分享
发布于 2019-08-25 22:00

相关推荐

bg27强双非本,目前在学习golang后端gin框架部分,在b站找了一个轮子项目敲了一下,技术栈是gin&nbsp;+&nbsp;gorm&nbsp;+&nbsp;mysql&nbsp;+&nbsp;redis。我目前的想法是这一个月学习408和go八股以及刷算法然后在12月找个寒假实习然后大三下开始准备考研。我是考研意愿比较强烈,想问一下我是应该all&nbsp;in其中一个方向吗,我感觉我实习对我考研来说也是没什么帮助的好像。
牛客28967172...:毕业工作,考研,考公是完全不同的方向。 99%的人拼尽全力也只能把一个做好(能做好都已经是佼佼者了,比如进进大厂,考985或者考公) 如果你确定要考研可以不用学任何就业技术框架,也不用实习经验,刷题背知识点就行,但注意必须考92院校起步,因为这个年代双非硕毕业后完全不如双非本(互联网行业),可以说双非硕在互联网就业完全是负收益
投递哔哩哔哩等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
6
分享

创作者周榜

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