2023 腾讯笔试 腾讯笔试题 腾讯研发 0915

笔试时间:2023年9月15日 秋招

备注:第五题暂无题解

第一题

题目:牛妹的数链们

牛妹有一堆数链,这些数链里面的数字都杂乱无章,牛妹想整理一下这些数字,把它们从小到大排成一个数链。

样例输入

[{1,3,5},{2,4,6},{1,2,3,4,5,6}]

样例输出

{1,1,2,2,3,3,4,4,5,5,6,6}

参考题解

暴力,数组排序,然后转化成链表

Python:[此代码未进行大量数据的测试,仅供参考]

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def merge_linked_lists(lists):
    merged_data = []

    for linked_list in lists:
        current = linked_list
        while current:
            merged_data.append(current.val)
            current = current.next

    sorted_data = sorted(merged_data)

    dummy = ListNode()
    current = dummy

    for val in sorted_data:
        current.next = ListNode(val)
        current = current.next
    return dummy.next

# 合并数链并返回排序后的链表
result = merge_linked_lists(data)

# 打印排序后的链表
while result:
    print(result.val, end=" ")
    result = result.next

第二题

题目:小Q的奇偶操作数组

小Q有一个长度为n的数组,它对这个数组有k次操作机会,操作如下:可以选择数组中的任意一个数字并改变它。

1、如果选择的数字x是奇数,那么这个奇数乘以2,即x = a * 2;

2、如果选择的数字x是偶数,那么这个偶数乘以2再加1,即x = a * 2 +1;

小Q想让这k次操作之后,数组元素之和最小,请你输出这个最小值是多少?

保证最终的元素之和不超过10^18。

输入描述

第一行两个正整数n和k,用空格隔开。

第二行输入n个正整数ai,每个ai代表数组的第i个元素。

1 <= n <= 200000

1 <= k <= 200000

1 <= ai <= 10000000

输出描述

输出一个整数,代表k次操作之后,数组元素之和的最小值。

样例输入

5 3

1 2 3 5 2

样例输出

20

提示:其中一种方案是:

1、将第一个元素: 1=>2

2、将第一个元素: 2=>5

3、将第二个元素:2=>5

总共3次操作,最后元素为5 5 3 5 2,数组元素之和为20

参考题解

贪心,使用小顶堆排序,每次取出最小元素即可。

C++:[此代码未进行大量数据的测试,仅供参考]

#include <iostream>
#include <queue>

using namespace std;

typedef long long ll;

int main() {
    int n, k, x;
    priority_queue<ll, vector<ll>, greater<ll>> minHeap;  

    // 输入 n 和 k
    cin >> n >> k;

    for (int i = 0; i < n; i++) { 
        cin >> x;
        minHeap.push(x);
    }

    for (int i = 0; i < k; i++) {
        ll smallest = minHeap.top();
        minHeap.pop();
        ll newElement = (smallest & 1) ? (smallest << 1) : (smallest << 1 | 1);
        minHeap.push(newElement);
    }

    ll ans = 0;

    while (!minHeap.empty()) {
        ans += minHeap.top();
        minHeap.pop();
    }

    cout << ans << endl;
    return 0;
}

Java:[此代码未进行大量数据的测试,仅供参考]

import java.util.PriorityQueue;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int k = scanner.nextInt();
        PriorityQueue<Long> minHeap = new PriorityQueue<>();

        for (int i = 0; i < n; i++) {
            int x = scanner.nextInt();
            minHeap.add((long) x);
        }

        for (int i = 0; i < k; i++) {
            long smallest = minHeap.poll();
            long newElement = (smallest & 1) == 1 ? smallest << 1 : (smallest << 1) | 1;
            minHeap.add(newElement);
        }

        long ans = 0;

        while (!minHeap.isEmpty()) {
            ans += minHeap.poll();
        }

        System.out.println(ans);
    }
}

Python:[

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2023 秋招笔试题汇总解析 文章被收录于专栏

2023秋招各大笔试题汇总,c++,java,python多种语言分析,解答。

全部评论

相关推荐

强大的马里奥:不太可能,我校计算机硕士就业率99%
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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