美团笔试

给定a数组,求b数组的数量,规则为:
1. 对于任意的i, ai  != bi
2. a数组的和等于b数组的和

各位大佬的思路是啥?
全部评论
dfs3.33
8 回复 分享
发布于 2023-08-19 21:01 四川
用的dp,测试用例都过了,一交0%😡
7 回复 分享
发布于 2023-08-19 20:59 广东
乱写了一个记搜就过了
1 回复 分享
发布于 2023-08-19 21:03 浙江
背包问题
1 回复 分享
发布于 2023-08-19 21:08 重庆
递归做半天,0%
1 回复 分享
发布于 2023-08-19 21:08 江苏
超时了,原本想把递归换成栈的,时间不够了
点赞 回复 分享
发布于 2023-08-19 20:58 四川
这个线性dp,和京东的第二题一样
点赞 回复 分享
发布于 2023-08-19 20:59 吉林
直接记忆化搜索就可以过
点赞 回复 分享
发布于 2023-08-19 21:00 上海
我用的递归 测试用例都过了 提交为0
点赞 回复 分享
发布于 2023-08-19 21:01 陕西
dp背包,3ms 400KB
点赞 回复 分享
发布于 2023-08-19 21:02 广东
点赞 回复 分享
发布于 2023-08-19 21:04 四川
维护长度为sum的数组做dp,dp[i]表示当前用i来满足自当前元素之后的所有元素的满足要求的数量,然后想办法从后到前遍历所有元素维护这个数组,最后输出dp[sum]
点赞 回复 分享
发布于 2023-08-19 21:04 浙江
dp[i][j]:表示构建新数组来到i位置 此时数组的和还剩余j ==>dp[数组长度][0] = 1: ==>第一列,最后一行答案已知 ==>需要知道:dp[0][sum]的值 ==>dp[i][j] = dp[i + 1][j - k]的和 其中j-k>=0 但是我只能过6%,不知道哪的问题 我的代码,看看佬能看出来我哪有问题 // Scanner sc = new Scanner(System.in); // int n = sc.nextInt(); // int[] resource = new int[n]; // for (int i = 0; i < n; i++) { // resource[i] = sc.nextInt(); // } // int sum = Arrays.stream(resource).sum(); // long[][] dp = new long[n + 1][sum + 1]; // dp[n][0] = 1; // for(int i = n - 1;i >= 0;i--){ // for(int j = 1;j < dp[0].length;j++){ // long res = 0; // for(int k = 1;j - k >= 0;k++){ // if(resource[i] == k) // continue; // res = res + dp[i + 1][j - k] % 1000000007; // } // res += dp[i + 1][j - 1]; // dp[i][j] = res; // } // } // System.out.println(dp[0][sum]);
点赞 回复 分享
发布于 2023-08-19 21:07 陕西
回溯3.33,超时
点赞 回复 分享
发布于 2023-08-19 21:07 广东
想到了是01背包问题,但还是用dfs做了,js简单优化了下3.33
点赞 回复 分享
发布于 2023-08-19 21:17 广东

相关推荐

比亚迪汽车新技术研究院 硬件工程师 总包21左右 硕士
点赞 评论 收藏
分享
11-18 09:44
Java
小白也想要offer:简历别放洋屁,搞不还还放错了,当然你投外企除外,以上纯属个人观点
点赞 评论 收藏
分享
杨柳哥:这不是普通人,那这个钱的是天才
点赞 评论 收藏
分享
1 1 评论
分享
牛客网
牛客企业服务