快手:笔试题(20190916)

本文介绍了一种用于验证和区分IPv4与IPv6地址的算法,并提供了小灵通键盘字母组合的解决方案,同时探讨了集合划分及最长等差数列的计算方法。

验证IP地址

分类别进行筛选,注意IPv4是以.为分割符,而IPv6是以:为分隔符。

def confine_ip_address(seq):
    if not seq:
        return 'Neither'
    if '.' in seq:
        seq = seq.split('.')
        # print('.', seq)
        if len(seq) == 4:
            return find_ipv4(seq)
    if ':' in seq:
        seq = seq.split(':')
        # print(':', seq)
        if len(seq) == 8:
            return find_ipv6(seq)
    if len(seq) != 4 or len(seq) != 6:
        return 'Neither'


def find_ipv4(seq):
    for su in seq:
        # print(su)
        if len(su) > 1 and su.startswith('0'):
            return 'Neither'
        if su < '0' or su > '255':
            return 'Neither'
    return 'IPv4'


def find_ipv6(seq):
    values = set(list(map(str, range(10))) + list('abcedfABCDEF'))
    for su in seq:
        # print(su)
        if len(su) > 1 and set(su) == {'0'}:
            return 'Neither'
        for s in su:
            if s not in values:
                return 'Neither'
    return 'IPv6'


if __name__ == '__main__':
    seq = input().strip()
    res = confine_ip_address(seq)
    print(res)

'''
172.16.254.1

2001:0db8:85a3:0:0:8A2E:0370:7334

256.256.256.256
'''

字母组合

小灵通的键盘,有意思。每次只对两个数字分别代表的意思进行组合,依次遍历下去。

def alpha_combine(seq):
    phone = ['abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz']
    values = {nu: pu for nu, pu in zip(range(2, 10), phone)}
    pre = values[seq[0]]
    for su in seq[1:]:
        left, right = pre, values[su]
        current = []
        for lu in left:
            for ru in right:
                current.append(''.join([lu, ru]))
        pre = current
    return pre


if __name__ == '__main__':
    seq = list(map(int, list(input().strip())))
    seq = [su for su in seq if su != 1]
    res = alpha_combine(seq)
    print('[', end='')
    print(', '.join(res), end='')

'''
23

92

458
'''

集合划分问题

懒人模式,暴力求解。通过率为57.13%,栈溢出,很正常的现象。

from itertools import permutations


def split_set_problem(seq, n):
    index = []
    for nu in range(1, n):
        index.extend(list(permutations(range(n), nu)))
    # print(index)
    res = float('inf')
    for idx in index:
        left = [seq[si] for si in idx]
        right = [seq[ri] for ri in range(n) if ri not in idx]
        current = abs(sum(left)-sum(right))
        if current < res:
            res = current
    return res


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

'''
5
2 4 5 6 9

4
1 1 1 999
'''

最长等差数列

再次懒人模式,暴力求解。通过率80%,超时,太正常了。

def longest_array_for_equal(seq):
    if not seq:
        return 0
    seq.sort()
    res = 0
    left, right = 0, seq[-1]-seq[0]
    for si in range(len(seq)):
        idx, cur = si, 0
        su = seq[si]
        cur = su
        for iu in range(left, right+1):
            count = 1
            idx = si
            while True:
                # print(cur, count, idx)
                if cur+iu in seq[idx+1:]:
                    idx = seq[idx+1:].index(cur + iu)
                    cur += iu
                    count += 1
                else:
                    break
            if count > res:
                res = count
    return res


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

'''
5
1 4 2 5 3

5
1 4 7 2 6
'''

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

### 关于快手外包 SQL 笔试题 针对快手外包相关的 SQL 笔试题,虽然无法提供具体的题目答案,但可以基于常见的 SQL 考察知识点来推测可能涉及的内容。以下是几个典型的 SQL 题目及其解答思路: #### 1. 数据查询与过滤 假设有一张名为 `user_activity` 的表,记录用户的活动数据,字段包括 `user_id`, `activity_date`, `points_earned`。 **问题**: 查询在过去7天内获得超过100积分的用户ID列表。 ```sql SELECT DISTINCT user_id FROM user_activity WHERE activity_date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND points_earned > 100; ``` 此查询利用了日期函数 `DATE_SUB` 来计算过去七天的时间范围,并通过条件筛选出符合条件的用户[^2]。 #### 2. 统计分析 假设有另一张表 `video_views`,包含视频观看次数的数据,字段有 `video_id`, `view_count`, `upload_date`。 **问题**: 计算每个月上传的视频总数以及平均观看量。 ```sql SELECT YEAR(upload_date) AS year, MONTH(upload_date) AS month, COUNT(video_id) AS total_videos, AVG(view_count) AS avg_view_per_video FROM video_views GROUP BY YEAR(upload_date), MONTH(upload_date); ``` 这里使用了聚合函数 `COUNT` `AVG` 进行统计,并按年份月份分组以展示每月的结果[^3]。 #### 3. 复杂连接操作 如果存在两张关联表:一张是 `users` (字段: `id`, `name`);另一张是 `orders` (字段: `order_id`, `user_id`, `amount`)。 **问题**: 找到下单金额最高的前五位客户的名字及总消费额。 ```sql SELECT u.name, SUM(o.amount) as total_spent FROM users u JOIN orders o ON u.id = o.user_id GROUP BY u.name ORDER BY total_spent DESC LIMIT 5; ``` 这段代码实现了两表之间的 JOIN 操作,并按照客户的总花费降序排列取前五个结果[^4]。 --- ### 提交简历后的等待时间差异原因探讨 关于提到的行业选择情况,在某些情况下确实会出现职位挂载现象用于未来的人力资源规划目的。这表明即使当前岗位需求不紧迫也可能接受应聘者的资料存档以便后续联系[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值