一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 1156|回复: 11
收起左侧

Coursera OA最新出炉

[复制链接] |试试Instant~ |关注本帖
119018682 发表于 2016-9-29 00:32:39 | 显示全部楼层 |阅读模式

2016(7-9月) 码农类 硕士 全职@coursera - 网上海投 - 在线笔试 |Otherfresh grad应届毕业生

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
今天做的coursera OA,第二题很多case没过,懵逼中
第一道题:
给n个日期,eg:20th Oct 2052 ; 1st Jun 1996.... 将所有日期转化成2052-10-20 ;  1996-6-01.... 1point 3acres 璁哄潧
月份,年份和几号用一个空格隔开。

第二题:
给一串数字和一个target n : eg:      1,2,3;          n = 7;. From 1point 3acres bbs
这串数字的子数字串为 {1} ; {2} ; {3} ; {1,2,3}  ; {1,2} ; {2,3}这六个。注意,所有子串中的数字一定要在原数组中相邻, 所以{1 , 3}不是这个串的子串。
现在问你子串中所有的数字之积小于n的子串有几个。
这个case下应该为6,因为全都是。

第二题我用个二维dp, 对角线上放nums[i].然后递推公式是:
for(int i = 0 ; i < num.length ; i++) {
     for(int j = i+1 ; j < num.length ; j++) {
           dp[i][j] = dp[i][j-1] * nums[j];. 1point3acres.com/bbs
            if(dp[i][j] < n) {
                  res++;
            }
     }
}
但是很多case过不了,到最后没时间了只能这么交了。。。。。错在哪里了有点懵逼。。。。。. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
sauceforge 发表于 2016-9-29 02:07:43 | 显示全部楼层
第二题和我上次在Hackerrank上做的一个OA一样,用一个队列来保存前i-1个里面乘积小于n的数,然后对于新加的数a[i], pop这个队列直到加入a[i] 后所有乘积还是满足条件,如果都不满足就不要push a[i]. 然后就能得到以a[i]结束有多少个子串。相当于是一维dp. dp[i]表示以a[i]结尾满足条件的子串有多少,但是需要用个队列来保存以前的数据。所以时间复杂度O(n), 空间也是O(n). 当时这样做在hackerank上全部过了,数据范围是10^5
回复 支持 1 反对 0

使用道具 举报

ann_good2005 发表于 2016-9-29 02:14:17 | 显示全部楼层
可能改成一维dp就可以?
vector<int> DP(n);
for(int i = 0; i < n; ++i){
        for(int j = i; j < n; ++j){
                if(i == j) DP[j] = nums[i];
                else DP[j] = DP[j-1] * nums[j];. 1point3acres.com/bbs
                if(DP[j] < target) res++;
        }
}
回复 支持 反对

使用道具 举报

哈哈贼 发表于 2016-9-29 03:16:38 | 显示全部楼层
楼主是OA1
回复 支持 反对

使用道具 举报

 楼主| 119018682 发表于 2016-9-29 04:11:22 | 显示全部楼层

对,第一个OA
回复 支持 反对

使用道具 举报

 楼主| 119018682 发表于 2016-9-29 04:41:52 | 显示全部楼层
sauceforge 发表于 2016-9-29 02:07.鏈枃鍘熷垱鑷1point3acres璁哄潧
第二题和我上次在Hackerrank上做的一个OA一样,用一个队列来保存前i-1个里面乘积小于n的数,然后对于新加的 ...
鏉ユ簮涓浜.涓夊垎鍦拌鍧.
哦对!数字还有范围是10^5,当时没在意。你这个解法好巧啊,不会溢出。
回复 支持 反对

使用道具 举报

 楼主| 119018682 发表于 2016-9-29 04:43:12 | 显示全部楼层
ann_good2005 发表于 2016-9-29 02:14
可能改成一维dp就可以?
vector DP(n);
for(int i = 0; i < n; ++i){

这题应该是考如何控制溢出的,我就错在这个上面了。
回复 支持 反对

使用道具 举报

LumiG 发表于 2016-9-29 12:26:42 | 显示全部楼层
刚刚做了OA, 第一题是LZ的第二题,确实直接做会内存爆掉。但是似乎数组里所有的数都保证了是大于等于1的,所以搞两根指针维护一个sliding window, 扫一遍就能过了。

第二题是那个字符串匹配的,就是子串里带一个星号。做的时候得KMP吧,但是有库函数就直接用了,除了一个case都过了,那个case不知道是什么鬼,也没有输出……开脑洞试了各种,都过不了,后来就算了交掉了……
回复 支持 反对

使用道具 举报

TerenceFeng 发表于 2016-10-2 12:28:42 | 显示全部楼层
第二题 数组是有序的么
回复 支持 反对

使用道具 举报

LumiG 发表于 2016-10-4 11:00:18 | 显示全部楼层
TerenceFeng 发表于 2016-10-2 12:28.1point3acres缃
第二题 数组是有序的么
. Waral 鍗氬鏈夋洿澶氭枃绔,
无序的,不过都保证了会大于1。。。这段就能过,O(n)的

. 1point 3acres 璁哄潧
def longest_subarray(nums, k):
    start, end = 0, 0
    cur = 1. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
    res = 0
    while end < len(nums):
        cur *= nums[end]
        while cur > k:
            cur /= nums[start]
            start += 1
        res += (end - start + 1)
        end += 1
    return res
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-5 04:32

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表