全部评论
就会第二题😂
第三题回溯只a了4%
就做了第二题。。。
其实第三题就是组合匹配,看某个位置有几种选择方式,从后往前直接相乘结果就出来了。这里需要注意为0的地方可选择数的最大最小值是左右第一个不为0的数为边界的。最后二十分钟才搞明白.....
为啥我前端岗和你们题一样?
最后一题有大佬分享个代码吗?我用一种很蠢的方法只能过60%,感觉可能有的情况没有考虑
0 1 1 第一题没太读懂。。。
没时间写第三题了。。。 感觉可以对每个含0的区间求sum,最后所有区间的sum相乘,比如[0,0,0,4,0,7,0,0,9,0]k=12,就是4个区间,
全A大佬发送代码嘛 学习下
第三题暴力过了20
求第三题填充数组代码,用回溯超过时间限制了
求第一题咋写啊 z
全A的大佬在哪
#include<bits/stdc++.h> using namespace std; const int mod = int(1e9 + 7); int table[1010][1010]; void init(int n/*数量*/,int len/*范围*/) { memset(table, 0, sizeof(table)); vector<int> dp(len, 1); for(int i=1;i<=n;i++) { table[i][0] = 1; for(int j=1;j<len;j++) { dp[j] += dp[j - 1]; dp[j] %= mod; table[i][j] = dp[j]; } } } int FillArray(vector<int> a, int k) { a.insert(a.begin(), 1); a.insert(a.end(), k); const int n = a.size(); vector<pair<int, int>> zero; int max_n = 0; int max_len = 0; for(int i=0;i<n-1;i++) { if(a[i+1]==0) { int j = i + 1; while (j < n && a[j] == 0) j++; int x = j - i-1; int y = a[j] - a[i]; zero.push_back({ x,y }); max_n = max(max_n, x); max_len = max(max_len, y+1); i = j-1; } } init(max_n, max_len); int64_t res = 1; for(auto [x,y]:zero) { res *= table[x][y]; res %= mod; } return res; } int main() { cout << FillArray({ 0,0,0,0,0,67,0,0 }, 100)<<endl; cout << FillArray({ 1,0,0 }, 3) << endl; cout << FillArray({ 0,4,4 }, 4) << endl; } 我想静静,最后应该用乘法把每个区间乘起来,我用成加分我想哭
第一题bfs秒了,简单😄
我觉得意外的挺简单。。。 第一题就普通的二叉树递归遍历,记录一下返回的状态就行了。 第二题更是简单,我一开始以为是子序列,用的单调栈。仔细一看是字串,一个循环就结束了。 第三题稍微复杂一点,每个区间的结果相乘即可, 每个区间 长度为n,可以填的数字数量为k,我用了一个带备忘录的递归计算的 dp[n][k] 为dp[n-1] 1-k的求和。
这挺简单的了,相比别的大厂。已经挺意外了。
想知道这个是填充之后整个数组都要递增吗,没看懂题。。
借楼 度小满内推!!! https://app.mokahr.com/recommendation-apply/duxiaoman/1484 内部推荐码NTAGdMm 大量HC
请问一下,腾讯音乐的招聘和腾讯的招聘是分开的吗
相关推荐
10-08 00:57
门头沟学院 Java 点赞 评论 收藏
分享