2019年4月7日腾讯数据技术实习生笔试

今天做腾讯笔试题,只记得编程题了,前面还有25条不定项选择,算法基础考的少,深度遍历考了2题,反而概率,线代颇多。记录下题目方便以后复习,有思路或代码的大神欢迎评论!!!

编程1

小Q在进行一个数字拆分的游戏,游戏规则如下:
小Q最初只有一个整数N,接下来每一轮中,小Q被允许对现有的每个数字进行下面两个操作之一:
1、对当前小Q手里的所有数减1
2、把所有数都拆分成更小的两个数之和
但是拆分操作只允许使用最多k次,现在小Q想知道吧N完全消去需要多少轮操作。

输入描述:
输入一行包含两个整数N,K(1<=N<=100,0<=K<=100)

输出描述:
输出一个整数,表示至少需要的轮数

实例1
input
5 2
output
4

实例2
input
15 4
output
6

编程2

小Q所在的城镇有一条笔直的公路,在这条公路上分布着n个村庄,编号为1-n。有些村庄需要购进水果,有些村庄需要贩卖出水果。
设第i个村庄对水果的需求量为Ai,其中Ai>0表示该村需要购进水果,Ai<0表示该村需要贩卖出水果。所有的村庄供需平衡,即所有的Ai之和等于0
把k个单位的水果从一个村庄运到相邻村庄需要k块钱的运费,帮小Q计算一下最少需要多少运费就可以满足所有村庄对水果的需求。

输入描述:
第一行,一个整数n,表示村庄的数量(2<=n<=300000)
第二行,n个空格间隔的整数,依次表示1到n号村庄对水果的需求Ai(-1000<=Ai<=1000)

输出描述:
一行,一个整数,表示最小的费用

实例1
input
5
5 -4 1 -3 1
output
9

编程3
一天,小Q得到了一个包含n个数字的数组,想对这个数组进行k次如下操作:
首先找出数组中最小的非0数字x,输出它;然后把数组中所有非0数字都减去x;如果数组中的所有数字都是0,那么直接输出0.

输入描述:
第一行两个数字n和k,用空格分开;
第二行n个数字,每两个数字之间用一个空格分开。
满足1<=n,k<=100000,数组中所有数字ai满足1<=ai<=1e9

输出描述:
k行,每行一个整数。

实例1
input
4 1
5 5 7 2
output
2

实例2
input
2 2
output
4
2

python3.5.2代码

inp = input().split()
n = int(inp[0])
k = int(inp[1])
arr = map(int,input().split())
arr = list(arr)
if arr == [0]*n:
    print(0)
else:
    t = 1
    while t<= k:
        brr = []
        for ip in arr:
            if ip != 0:
                brr.append(ip)
        if brr != []:
            print(min(brr))
        for i in range(n):
            if arr[i] != 0:
                arr[i] = arr[i]-min(brr)
        t += 1

时间超限,有没有哪位大神有更好的算法~~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值