字节跳动:笔试题(20190908)

被看到最多次的机器人

设置一个全0的跟踪列表,依次遍历序列找出它当前可以看到的第一个机器人,在其对应的跟踪列表的元素值加1。

def most_see_count(n, seq):
    if not seq and len(seq) < 2:
        return 0
    res = [0] * n
    for si in range(1, n):
        for sj in range(si-1, -1, -1):
            if seq[sj] >= seq[si]:
                res[sj] += 1
                break
    # print(res)
    if max(res) == 0:
        return 0
    return seq[res.index(max(res))]


if __name__ == '__main__':
    n = int(input().strip())
    seq = list(map(int, input().strip().split()))
    res = most_see_count(n, seq)
    print(res)

'''
7
3 4 10 7 4 6 2
'''

水桶盛水

没思路。

def water(seq):
    pass


if __name__ == '__main__':
    seq = list(map(int, input().strip().split()))
    num = int(input().strip())
    res = water(seq)
    print(res)

'''
3 5 8
4
'''

小Q的方块游戏

双标志位法:第一个flag用来区别是向左还是向右,第二个标志位conf用来判断是否方向<>是连续的。

def game_score(seq):
    if not seq:
        return 0
    values = seq[:]
    res = 0
    idx, flag = 0, True     # r
    conf = False
    while values:
        if idx < 0 or idx > len(values) - 1:
            break
        vu = values[idx]
        if vu == '<' or vu == '>':
            if conf:
                values[idx] = '*'
                values.remove('*')
                if not flag:
                    idx -= 1
            else:
                conf = True
                if vu == '<':
                    flag = False
                    idx -= 1
                else:
                    flag = True
                    idx += 1
        else:
            pre = idx
            if values[pre] == 0:
                values.remove(0)
                if not flag:
                    idx -= 1
            else:
                if flag:
                    res += vu
                    idx += 1
                else:
                    res += vu
                    idx -= 1
                conf = False
                values[pre] -= 1
        # print(idx, values, res)
    return res


if __name__ == '__main__':
    m, n, q = list(map(int, input().strip().split()))
    seq = list(input().strip().split())
    for si in range(m):
        su = seq[si]
        if su.isdigit():
            seq[si] = int(su)
    for _ in range(q):
        left, right = list(map(int, input().strip().split()))
        res = game_score(seq[left-1:right])
        print(res)

'''
6 10 3
> 2 2 < > 3
1 6
2 4
4 6
'''

解码问题

动态规划,每一次有两种可能:当前的值作为一个值或者与紧跟后面的一个值成为一个整体。为了设置一个全局变量作为接纳容器,选择建立类,在类的成员变量中定义。

import string


class Solution:
    def __init__(self):
        self.res = None
        self.values = {vk: vu for vk, vu in zip(range(1, 27), string.ascii_uppercase)}

    def decode_problem(self, seq):
        self.find(seq, [])
        return self.res

    def find(self, source, target):
        # print('find', source, target)
        if not source:
            if self.res is None:
                self.res = []
            self.res.append(''.join(target))
            return
        if source[0] != 0:
            tu = target[:]
            tu.append(self.values[source[0]])
            self.find(source[1:], tu)
        if len(source) > 1 and source[0] in [1, 2] and source[:2] < [2, 7]:
            tu = target[:]
            tu.append(self.values[source[0]*10+source[1]])
            self.find(source[2:], tu)


if __name__ == '__main__':
    seq = list(map(int, list(input().strip())))
    res = Solution().decode_problem(seq)
    res.sort()
    for ru in res:
        print(ru)

'''
12
'''

(最近更新:2019年09月14日)

字节跳动是一家中国的科技公司,总部位于北京,成立于2012年。它是一家以智能内容推荐算法为核心的技术公司,旗下拥有多个知名的移动应用,如抖音、今日头条等。 字节跳动的Java笔试题主要考察对Java编程语言的理解和应用能力。具体目可能会涵盖Java基础知识、面向对象编程、多线程、集合框架等方面。 对于这样的笔试题,可以尝试以下思路进行回答: 1. 首先,对目进行仔细阅读和理解。确保对目要求有清晰的认识,明确自己需要实现的目标。 2. 根据目要求,分析需要使用哪些Java的特性和知识来解决问。例如,如果目要求涉及到集合操作,可以选择合适的集合类和方法;如果目涉及到多线程,可以使用线程类和相关同步机制。 3. 根据自己对问的理解,进行算法设计和编码。可以使用IDE等开发工具进行编码和调试。 4. 在编码过程中,注意代码的规范性、可读性和可维护性,注重代码的复用和优化。 5. 完成编码后,进行测试和调试。使用不同的测试用例验证代码正确性,并修复可能出现的bug。可以使用调试工具帮助定位和解决问。 6. 完成代码的编写和测试后,可以进行代码的优化和改进。例如,可以考虑使用更高效的算法、减少内存和时间消耗等。 最后,可以将自己的解决方案进行整理和总结,提炼出解的关键思路和方法。这样能够进一步加深对Java编程语言的理解和应用能力。同时,也可以在面试过程中展示自己的编程能力和解决问的思维模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值