网易 8.11 算法笔试题

第一题:

给n个数组,计算每个数组里面的元素有多少个1,相同1次数为一类,计算每个数组有几类。

#coding=utf-8
# 本题为考试多行输入输出规范示例,无需提交,不计分。
import sys

if __name__ == "__main__":
    # 读取第一行的n
    t = int(sys.stdin.readline().strip())
    ans = 0
    result = []
    for i in range(t):
        # 读取每一行
        n = int(sys.stdin.readline().strip())
        d = {}
        line = sys.stdin.readline().strip()
        values = map(int, line.split())
        for v in values:
            count = 0
            while v:
                c = v % 2
                count += c&1
                v = v >> 1
            if count in d:
                continue
            else:
               d[count] = 1
        result.append(len(d.keys()))
    print (result)

第二题:

游泳池,一个进水管和一个排水管,分别每度过 t1, t2 时间改变开关的状态,分别每分钟排入 m1,m2 的水量。计算 t 时刻泳池的水量。

# coding=utf-8
# 本题为考试多行输入输出规范示例,无需提交,不计分。
import sys

if __name__ == "__main__":
    # 读取第一行的n
    t = int(sys.stdin.readline().strip())
    for _ in range(t):
        line = sys.stdin.readline().strip()
        values = list(map(int, line.split()))
        m, t, m1, t1, m2, t2 = values[0], values[1], values[2], values[3], values[4], values[5]
        tab1, tab2 = 1, 1
        result = 0
        for i in range(1, t+1):
            if tab1 and not tab2:
                if result + m1 < m:
                    result += m1
                else:
                    result = m
            elif tab2 and not tab1:
                if result - m2 >= 0:
                    result -= m2
                else:
                    result = 0
            elif tab2 and tab1:
                result += (m1 - m2)
                if result > m:
                    result = m
                if result < 0:
                    result = 0
            if (i // t1) % 2:
                tab1 = 0
            else:
                tab1 = 1
            if (i // t2) % 2:
                tab2 = 0
            else:
                tab2 = 1
        print(result)

第三题:

给定n个字符串,判断字符串最大连续N的个数(可以容许改变两个字符)

# coding=utf-8
# 本题为考试多行输入输出规范示例,无需提交,不计分。
import sys

if __name__ == "__main__":
    # 读取第一行的n
    t = int(sys.stdin.readline().strip())
    ans = 0
    result = []
    interval = []
    for _ in range(t):
        # 读取每一行
        s = sys.stdin.readline().strip()
        lens = len(s)
        if s[-1] == "N":
            s = s + "G"
        l = []
        ls = len(s)
        k = 0
        for i in range(ls):
            if s[i] != "N":
                if not l:
                    l.append(i)
                    k = i
                else:
                    l.append(i - k - 1)
                    k = i
        if len(l) <= 3:
            re = lens
        else:
            interval = [l[i] + l[i - 1] + l[i - 2] + 2 for i in range(2, len(l))]
            re = max(interval)
        print(re)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值