DJI笔试题前两题不知为啥没通过,大佬们帮忙看看。

有点气人。。前两道那么简单却一直调不出来。。

第一题题目:

题目描述:

Tom最近很闲,所以发明了一个小游戏。给出一个数字m(m 521),有三个数字牌,可以用一张牌替换随意一种数字,一张扑克牌只能用一次,现在要求求出替换后的最大值(可以选择不用数字牌)。

输入

有n组数据,先输入n。随后每组数据输入m(m 521)和三个数字牌

输出

替换后的最大数字

样例输入

2

9001

0

1

2

9301

0

1

2

样例输出

9221

9321

我的代码:提示OLE错误:您的程序还在运行,但是输出内容字符数已经超过正确答案的字符数,明显已经是错误的,不必再运行下去了。

一脸懵逼,找到挺久找不到错误。。

var acc = +read_line()
var i = 0
while (i++ < acc) {
 var input = read_line()
 var r = [], j = 0;
 r.push(read_line())
 r.push(read_line())
 r.push(read_line())
 print(maxNum(input, r))
}
function maxNum(str, replace) {
  var arr = replace.slice()
  arr.sort(function (a, b) {
    return +b - +a
  })
  var ans = ''
  for (var i = str.length - 1; i >= 0; i--) {
    var radixNum = Math.floor(+str / Math.pow(10, i) % 10)
    // var j = 0
    if (radixNum <= +arr[0]) {
      ans += arr[0]
      arr.shift()
    } else
      ans += radixNum.toString()
  }
  return ans
}

第二题题目:

题目描述:

给出n个数字(n ,数字范围为[0, 100000]),要求找出序列中有多少个连续子序列满足以下要求:子序列中任意一个数字出现次数小于k

输入

第一行输入n(n 100000)和k(k 100000)

然后输入n个数字(范围为[0,100000])

输出

满足要求的连续子序列个数

样例输入

4 1

1 2 2 3

样例输出

6

Hint

对于1 2 2 3序列,满足要求的子序列区间为[1,1] [2,2] [3,3] [4, 4] [1, 2] [3, 4]

我的思路是:初始化l=r=0指针,r不断向右移动,将当前的元素记录进hash表中,判断这个值是否小于等于k。是的话ans++,否则将l向后移动一位,r=l,继续计算。答案是能跑出来。

但运行时提示TLE时间超限。。有啥更好的思路?

#前端工程师#
全部评论
我觉得第二题要剪枝,比如k=1,你[1,2,3,3,4]的话i从1开始到3为止,i=2的时候就要可以从4开始,中间的上一次计算过了,只需加一下,没考试,上一下自己的程序,不知道对不对 int main() { int n, k; cin >> n >> k; int v[n]; for(int i=0; i<n; ++i) { cin >> v[i]; } int last = 0; int result = n;//最少有4个 for(int start = 0; start < n - 1; ++start) { int cnt = 1; int record[10];//record[i+1]表示i出现的次数,0-9 memset(record, 0, sizeof(record)); for(int i = start; i <= last; ++i) { if(record[v[i] + 1]==0) record[v[i] + 1] = 1;//初始只出现了一次 else ++record[v[i] + 1]; } result += (last - start); for(int end = last + 1; end < n; ++end) { record[v[end]+1]++; if(record[v[end]+1] > k) {//重复次数超过k last = end - 1;//下一次从last+1开始,因为下一次到last也都可以 break; } else if(end < n - 1) { ++result; } else { if(record[v[end]+1] <= k) ++result; last = end;//到达最后一个了 } } } cout<<result<<endl; }
点赞 回复 分享
发布于 2017-09-04 14:47
感觉楼主的第一题代码跟题意不太对诶,一个数字牌替换一种数字,楼主的代码里看的话是一个数字牌替换一个数字诶。 从题面上看 9001 0 1 2 把2替换掉0,不就成9221了咩
点赞 回复 分享
发布于 2017-09-11 21:25
赛马网真的服。。。。。。。。
点赞 回复 分享
发布于 2017-09-04 14:02
不懂赛码的测试用例啊
点赞 回复 分享
发布于 2017-09-04 13:50
赛马网咋这么不走心
点赞 回复 分享
发布于 2017-09-04 13:47
***坑了,测试用例感觉莫名奇妙
点赞 回复 分享
发布于 2017-09-04 13:47
同样,放弃了,实在搞不懂它的输入输出,就连测试用例也过不了,不知道大疆你再考什么,前两题本来很简单的,就是通过不了,测试用例也过不去
点赞 回复 分享
发布于 2017-09-04 13:08

相关推荐

03-15 14:55
已编辑
门头沟学院 golang
bg:双非学院本&nbsp;ACM银&nbsp;go选手timeline:3.1号开始暑期投递3.7号第二家公司离职顽岩科技&nbsp;ai服务中台方向&nbsp;笔试➕两轮面试,二面挂(钱真的好多😭)厦门纳克希科技&nbsp;搞AI的,一面OC猎豹移动&nbsp;搞AIGC方向&nbsp;一面OC北京七牛云&nbsp;搞AI接口方向&nbsp;一面OC上海古德猫宁&nbsp;搞AIGC方向&nbsp;二面OC上海简文&nbsp;面试撞了直接拒深圳图灵&nbsp;搞AIGC方向一面后无消息懒得问了,面试官当场反馈不错其他小厂没记,通过率80%,小厂杀手😂北京字节&nbsp;具体业务不方便透露也是AIGC后端方向2.28约面&nbsp;(不知道怎么捞的我,我也没在别的地方投过字节简历哇)3.6一面&nbsp;一小时&nbsp;半小时拷打简历(主要是AIGC部分)剩余半小时两个看代码猜结果(经典go问题)➕合并二叉树(秒a,但是造case造了10分钟哈哈)一天后约二面3.12&nbsp;二面,让我挑简历上两个亮点说,主要说的docker容器生命周期管理和raft协议使用二分法优化新任leader上任后与follower同步时间。跟面试官有共鸣,面试官还问我docker底层cpu隔离原理和是否知道虚拟显存。之后一道easy算法,(o1空间解决&nbsp;给定字符串含有{和}是否合法)秒a,之后进阶版如何用10台机加快构建,想五分钟后a出来。面试官以为45分钟面试时间,留了18分钟让我跟他随便聊,后面考了linux&nbsp;top和free的部分数据说什么意思(专业对口了只能说,但是当时没答很好)。因为当时手里有7牛云offer,跟面试官说能否快点面试,马上另外一家时间到了。10分钟后约hr面3.13,上午hr面,下午走完流程offer到手3.14腾讯技术运营约面,想直接拒😂感受:&nbsp;因为有AIGC经验所以特别受AI初创公司青睐,AIGC后端感觉竞争很小(指今年),全是简历拷打,基本没有人问我八股(八股吟唱被打断.jpeg),学的东西比较广的同时也能纵向深挖学习,也运气比较好了哈哈可能出于性格原因,没有走主流Java路线,也没有去主动跟着课写项目,项目都是自己研究和写的哈哈
烤点老白薯:你根本不是典型学院本的那种人,贵了你这能力
查看7道真题和解析
点赞 评论 收藏
分享
评论
1
5
分享

创作者周榜

更多
牛客网
牛客企业服务