米哈游 9.24 java笔试

单选题和多选题难度还可以;
算法题第三道我还是卡在了双循环超时上
对于一个一维数组

有没有佬能指点一下,这种双循环该怎么优化以避免超时呢?
全部评论
就是算1*a[i-1]+2*a[i-2]+....+i-1*a[1]再乘上a[i]就可以啦
2
送花
回复
分享
发布于 2023-09-24 22:06 安徽
合并一下同类项就可以a1(a2+2a3+3a4+…)
1
送花
回复
分享
发布于 2023-09-24 22:04 湖北
秋招专场
校招火热招聘中
官网直投
就是j*aj的和乘ai,然后因为每层计算前面的j会-1,所以每次计算前给他减掉i后面所有数的sum就出来了
1
送花
回复
分享
发布于 2023-09-24 22:07 安徽
这样步步mod就可以保证不溢出了
1
送花
回复
分享
发布于 2023-09-24 22:59 湖北
开辟两个数组b和c,数组b遍历一次k*a[k]+b[k-1],数组c遍历一边a[k]+c[k-1],最后求和res+=a[k]*(b[k]-k*c[k]),应该是这么解的吧(还有些细节0应该手动初始化,k从1开始)
1
送花
回复
分享
发布于 2023-09-24 23:07 四川
可以把sum[i-1]和t[i-1]换成一个变量存储,也能节省一些空间 int n = in.nextInt(); int[] a = new int[n+1]; long[] sum = new int[n+1];//存前缀和 sum[0]=0; long[] t = new int[n+1]; t[0]=0; long res; for(int i=1;i<=n;i++){ a[i]=in.nextInt(); sum[i]=sum[i-1]+a[i]; t[i]=t[i-1]+sum[i-1]; long tmp = (t[i]*a[i])%1000000007; res = (res+tmp)%1000000007; }
1
送花
回复
分享
发布于 2023-09-25 08:56 上海
蹲 我也是
点赞
送花
回复
分享
发布于 2023-09-24 22:00 新加坡
试了分治还是超时...
点赞
送花
回复
分享
发布于 2023-09-24 22:00 北京
蹲,感觉是数学公式推导,能在O(n)算完
点赞
送花
回复
分享
发布于 2023-09-24 22:01 江苏
我想出来了后缀和的方法,但是结果错误,不知道哪搞错了
点赞
送花
回复
分享
发布于 2023-09-24 22:01 湖北
为啥我这种后缀和的方法不超时但是还是只能过20啊,result和result2我自验证是一样的
点赞
送花
回复
分享
发布于 2023-09-24 22:08 湖北
只用单层循环即可,首先你需要记录前缀和。然后第二次计算的时候,需要有一个变量,每次只需要计算临时变量*arr【i】就行,这个临时变量每次循环后+第i个前缀和。
点赞
送花
回复
分享
发布于 2023-09-24 22:13 北京
前缀和20%,改long long70%
点赞
送花
回复
分享
发布于 2023-09-24 22:15 广东
一样的循环 超时过20
点赞
送花
回复
分享
发布于 2023-09-24 22:18 陕西
众安保险投了没,众安科技投了没,500强工资高,流程刚开始,保险公司可老有钱了~ https://app.mokahr.com/m/campus_apply/zhongan/71908?recommendCode=DS5jTXpa#/jobs
点赞
送花
回复
分享
发布于 2023-09-25 10:10 上海

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务