全部评论
+1
第一题这样 let N = nums.length let total1 = 0 for (let i = 0; i < N; i++) { if (nums[i] === 1) total1++ if (nums[i] === 0) nums[i] = 1 else nums[i] = -1 } console.log(nums) let current = 0, sum = nums[0] for (const num of nums) { current = Math.max(current + num, num) sum = Math.max(current, sum) } console.log(sum + total1)
坐标北京,外企,校招还有hc,三餐免费,出国团建,不卷不卷,go和python岗位,简历邮箱chunrong.chen@mxplayer.in 公司:MX PLAYER
一直笔试完成,没HC了吧
老哥,收到面试邀请了吗?
但是…数组长度为0返回-1 我考虑了的情况下依旧91% 我都迷了😮💨
第三题的: #include<bits/stdc++.h> using namespace std; const int N=1e5+5,M=20; int n,m; int a[N]; int maxf[N][M]; int minf[N][M]; int querymax(int l,int r) { int len=r-l+1; int k=(log(len)/log(2)); return max(maxf[l][k],maxf[r-(1<<k)+1][k]); } int querymin(int l,int r) { int len=r-l+1; int k=(log(len)/log(2)); return min(minf[l][k],minf[r-(1<<k)+1][k]); } int main() { cin>>n>>m; for(int i=1;i<=n;i++) cin>>a[i]; for(int j=0;j<M;j++){ for(int i=1;i+(1<<j)-1<=n;i++) { if(j==0) maxf[i][j]=a[i]; else{ maxf[i][j]=max(maxf[i][j-1],maxf[i+(1<<(j-1))][j-1]); } } } for(int j=0;j<M;j++){ for(int i=1;i+(1<<j)-1<=n;i++) { if(j==0) minf[i][j]=a[i]; else{ minf[i][j]=min(minf[i][j-1],minf[i+(1<<(j-1))][j-1]); } } } while(m--){ int x,y;cin>>x>>y; cout<<querymax(x,y)-querymin(x,y)<<endl; } return 0; }
第二题的 #include <bits/stdc++.h> using namespace std; const int N = 10005; int n,m,k; int a[N][N]; int dp[N][N]; int mod =1e9+7; int main(){ cin>>n>>m>>k; while(k--) { int x,y;cin>>x>>y;a[x][y] = 1; } dp[0][1] = 1; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(!a[i][j]) dp[i][j] = (dp[i-1][j]+dp[i][j-1])%mod; else dp[i][j] = 0; } } cout<<dp[n][m]; return 0; }
这是第一题的: #include <bits/stdc++.h> using namespace std; const int N = 100005; int n; int a[N]; int s[N]; int all; int maxadd; int q[N]; int t = 0,h = 1; int main(){ cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) { s[i]=s[i-1]+a[i]; } all = s[n]; int l = 1,r = 1; for(;l<=n;l++) { if(!a[l]) break; } r = l; while(l<=n&&r<=n) { int call = r-l+1; int c1 = s[r]-s[l-1]; int c0 = call-c1; int addd = c0-c1; maxadd = max(maxadd,addd); if(c1>=c0) { r++;l = r;continue; }else if(c1==call){ while(l<=n&&l==r&&(s[r]-s[l-1])==(r-l+1)){ //l==r l++,r++; // call = r-l+1; // c1 = s[r]-s[l-1]; // c0 = call-c1; } }else r++; // cout<<l<<" "<<r<<endl; } cout<<all+maxadd<<endl; return 0; }
没有一到都a不出
离谱的是Java和c限时一样,我拿Java写了一遍超时,然后换c++就行了😓
第二题有AC的吗,求代码
奇怪,为什么我每题都没AC🤣,自测数据都没问题呀
我为什么发现了这个改了之后还是91😂
@coldice23 怎么说
第一题我看了好几遍题目都没有发现-1😂😂
是同一套题目吗?为啥我感觉不简单啊😅 翻转游戏,有障碍物的不同路径,礼物最大价值-最小价值
所以第二题是怎么弄得,还有O(m*n)更低的?
有没有同胞一样,为这个卡了一会
相关推荐
03-29 17:59
门头沟学院 大数据开发工程师 点赞 评论 收藏
分享