腾讯笔试,数据分析岗位

1. 不会
2. 两段区间定积分, 线下测试没问题,提交0分
# -*- coding: utf-8 -*-

import sys

# sys.stdin = open('data')

def func(A, B, C):
    delta = (B * C - A) ** 2 - (B*C)**2
    if delta < 0:
        print(0)
        return
    up = A - B * C
    s1 = (up + delta ** 0.5) / (B * B)  #交点1的坐标
    s2 = (up - delta ** 0.5) / (B * B)  #交点2的x坐标
    if s1 > s2:
        s1, s2 = s2, s1
    ans = 0
    ans += 2 / (3 * A) * (2 * A * s1) ** 1.5   #第一段区间定积分
    ans += 1 / (3 * A) * (( 2* A * s2) ** 1.5 - (2*A*s1)**1.5) #第二段区间定积分
    ans -= B / 2 * (s2 * s2 - s1 * s1)
    ans -= C * (s2 - s1)
    print(ans)


while True:
    try:
        n = int(input())
        for i in range(n):
            A, B, C = map(int, input().split())
            func(A, B, C)
    except:
        break
3.  总数-不符合条件数, 超时, 过30%
mod = 100003
m, n = map(int, input().split())
x1 = m ** (n-1)
x2 = (m-1) ** (n-1)
print(m * (x1 - x2) % mod)
4. 找到具有相反变化趋势的序列,例如(x1, x1+a, x1+b)与(x2, x2-a, x2-b)可以匹配成功, 只需记录(a, b)和(-a, -b)即可, AC
from collections import defaultdict

n, k = map(int, input().split())
nums = []
dic = defaultdict(int)
for i in range(n):
    x = list(map(int, input().split()))
    tmp = []
    for j in range(len(x)-1):
        tmp.append(x[j+1]-x[j])
    dic[tuple(tmp)] += 1

# print(dic)
ans1 = ans2 = 0
first = True
for x, cnt in dic.items():
    tmp = tuple(-e for e in x)
    if tmp == x and first:   # (0, 0, 0, 0, ...)的情况
        ans2 = cnt * (cnt-1) // 2
        first = False
    elif tmp in dic:
        ans1 += cnt * dic[tmp]
print(ans1//2 + ans2)

5.  BFS, 超时, 95%通过
from collections import defaultdict

T = int(input())
for _ in range(T):   #BFS广度优先遍历,以每个具有边连接的节点为起点
    n = int(input())
    graph = defaultdict(list)
    sts = []
    for i in range(n):
        a, b = map(int, input().split())
        graph[a].append(b)
        graph[b].append(a)
        sts.append(a)

    ans = 1

    # def dfs(graph, i, vis, count):
    #     global ans
    #     ans = max(ans, count)
    #     for j in graph[i]:
    #         vis.add(i)
    #         dfs(graph, j, vis, count+1)

    vis = set()
    for i in sts:
        if i in vis:continue
        q = [i]
        prev_len = len(vis)
        vis.add(i)
        while q:
            x = q.pop(0)
            for xx in graph[x]:
                if not xx in vis:
                    q.append(xx)
                    vis.add(xx)
        ans = max(ans, len(vis)-prev_len)
    print(ans)




#腾讯笔试##笔试题目##腾讯##数据分析师#
全部评论
借个楼啊,我把五个题的思路和代码全写了,https://blog.csdn.net/m0_38065572/article/details/105783418写的还算详细,大家可以看看指正一下
1 回复 分享
发布于 2020-04-27 22:24
楼主牛啊,我后两题都没敢做,看来还是前面花太多时间了
点赞 回复 分享
发布于 2020-04-26 22:25
第一题钱是无限多的 就模拟一下每次的过程用一个数记录金币最大值就ok了 第二题这种题我最烦了很简单的数学题但就是0% 第三题我也找到了这个通项公式但是超时,30% 第四题没啥说的 第五题我是用的并查集,而且也剪枝了,按理说应该是复杂度很低,但只通过45%其他超时,这是leetcode上原题好像叫朋友圈,气死了气死了气死了
点赞 回复 分享
发布于 2020-04-26 22:27
第一天前缀和就可以了,两个前缀和求差
点赞 回复 分享
发布于 2020-04-26 23:35
第二题定积分存在精度问题,开方和指数计算会有误差,不可控,用数值模拟求面积可以控制误差,就能过。。我被这题搞死了
点赞 回复 分享
发布于 2020-04-27 13:24
第四题,我的思路和楼主基本一致,找差值。但是我统计有多少个完美对,是处理一行数据 统计过往中它的相反差值有几个,然后count加上去,本地自测没问题,就是提交后通过为0。大家能帮忙看看嘛 if __name__ == "__main__":     n, k = map(int, input().split())     dict = {}     count = 0     for i  in range(n):         lst = list(map(int, input().split()))         diff = []         reverse_diff = []         for j  in range(1,k):             diff.append(lst[j]-lst[0])             reverse_diff.append( -1*( lst[j]-lst[0] ) )         diff = tuple(diff)         reverse_diff = tuple(reverse_diff)         if(diff not in dict.keys()):             dict[diff] = 1         else:             dict[diff] += 1         if(reverse_diff in dict.keys()):             count += dict[reverse_diff]              print(count)
点赞 回复 分享
发布于 2020-04-27 14:25

相关推荐

10-16 22:56
门头沟学院 C++
1234567800:歌尔今年给211开14-15k吗,我本地人连面试都不给😂
点赞 评论 收藏
分享
ArisRobert:统一解释一下,第4点的意思是,公司按需通知员工,没被通知到的员工是没法去上班的,所以只要没被通知到,就自动离职。就是一种比较抽象的裁员。
点赞 评论 收藏
分享
评论
5
25
分享
牛客网
牛客企业服务