笔试-度小满-180913(机器学习)

笔试-度小满-180913

  • 机器学习研发
  • 选择 30,编程 2

1. 火车站台

思路

  • 求区间最大重叠数

暴力(36%)

n = int(input())
tmp = dict()
mx = 0
for _ in range(n):
    x, y = list(map(int, input().split()))
    for i in range(x, y):
        if i in tmp:
            tmp[i] += 1
        else:
            tmp[i] = 1
        mx = max(tmp[i], mx)
print(mx)

扫描线法(AC)

n = int(input())
tmp = []
mx = 0
for _ in range(n):
    x, y = list(map(int, input().split()))
    tmp.append((x, 1))
    tmp.append((y, -1))
tmp.sort()
mx = 0
t = 0
for i in tmp:
    if i[1] == 1:
        t += 1
    else:
        t -= 1
    mx = max(mx, t)
print(mx)

2. 商品交易

思路

  • LeetCode原题
  • 因为这里要求输出最小交易次数,所以贪心不可行,改用双指针

贪心(9%)

n = int(input())
nums = list(map(int, input().split()))
def foo(nums):
    ans = 0
    cnt = 0
    if len(nums) <= 1:
        return 0
    for x in range(1, len(nums)):
        if nums[x] - nums[x - 1] >= 0:
            ans += nums[x] - nums[x - 1]
            cnt += 2
    return ans, cnt
ans, cnt = foo(nums)
print(ans, cnt)

双指针(AC)

n = int(input())
nums = list(map(int, input().split()))
def foo(nums):
    ans = i = 0
    cnt = 0
    while i < len(nums):
        while i < len(nums) - 1 and nums[i + 1] <= nums[i]:
            i += 1
        minima = nums[i]
        i += 1
        while i = nums[i]:
            i += 1
        if i < len(nums):
            ans += nums[i] - minima
            cnt += 2
    return ans, cnt
ans, cnt = foo(nums)
print(ans, cnt)

完整问题描述看这里

#机器学习##度小满##笔试题目#
全部评论
完整问题怎么看不了呀,明天测试部门的笔试
点赞 回复 分享
发布于 2018-09-25 20:55
方便说一下第一题的思路吗?
点赞 回复 分享
发布于 2018-09-13 17:59
为啥我投了,连笔试都没收到...尴尬
点赞 回复 分享
发布于 2018-09-13 17:38
第一题是不是可以用bit-map递归去重次数表示最大迭代数
点赞 回复 分享
发布于 2018-09-13 17:30

相关推荐

牛客41406533...:回答他在课上学,一辈子待在学校的老教授用三十年前的祖传PPT一字一句的讲解,使用谭浩强红皮书作为教材在devc++里面敲出a+++++a的瞬间爆出114514个编译错误来学这样才显得专业
点赞 评论 收藏
分享
爱吃烤肠的牛油最喜欢...:50K是ssp了估计,ssp的人家多厉害都不用说,每年比例大概在百分之5左右
点赞 评论 收藏
分享
评论
点赞
26
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务