腾讯笔试第三题求解答

def cal(nums, k):
    nums = [num for num in nums if num > 0]
    nums = sorted(nums)
    pos = 0
    step = 0
    zeros = False
    while pos < len(nums) and k:
        if nums[pos]-step>0:
            print(nums[pos]-step)
            k -= 1
            step += nums[pos]
            pos += 1
        else:
            if nums[pos]-step < 0:
                zeros = False
            pos += 1
    while zeros and k:
        print(0)
        k -= 1
通过20%,不明白哪里错了
#腾讯##笔试题目#
全部评论
#include<iostream> #include<queue> #include<algorithm> #include<functional> using namespace std; int main() {     priority_queue<int, vector<int> , greater<int> > minheap;     int n,k,tmpInput;     cin >> n >>k;     for (int i = 0; i < n; i++)     {         cin >> tmpInput;         minheap.push(tmpInput);     }     int minusNum = 0,tmpMin=0;     for (int i = 0; i < k; i++)     {         tmpMin = 0;         while (!minheap.empty() && tmpMin==0)         {             tmpMin = minheap.top() - minusNum;             minheap.pop();         }         minusNum += tmpMin;         cout << tmpMin << endl;     } }
点赞 回复 分享
发布于 2019-04-07 21:40
点赞 回复 分享
发布于 2019-04-08 20:05
点赞 回复 分享
发布于 2019-04-08 02:45
排序,然后直接输出后一个减前一个?中间判断轮次和是否为0,为0直接结束
点赞 回复 分享
发布于 2019-04-07 21:45
对num取一个set就差不多了吧
点赞 回复 分享
发布于 2019-04-07 21:41
连续几个一样的会出现负数的情况,考虑了吗?
点赞 回复 分享
发布于 2019-04-07 21:39

相关推荐

龙珠传说:nb,公务员解约不需要支付违约金吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务