腾讯微保社招笔试

51 阅读1分钟

博主最近参加了腾讯的社招笔试,分享给大家作参考

最大子数组和

leetcode.cn/problems/ma…

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

子数组是数组中的一个连续部分。

定义 current_sum 表示以当前元素结尾的最大子数组和

遍历数组:

current_sum = max(num, current_sum + num)

AI写代码bash
1

如果 current_sum + num 比 num 小,则舍弃前面的和,从 num 开始

维护 max_sum 保存遍历过程中的最大值,该最大值就是我们追求的答案

class Solution {
    public int maxSubArray(int[] nums) {
        int maxSum = nums[0];
        int currentSum = nums[0];
        for(int i=1;i<nums.length;i++){
            currentSum = Math.max(nums[i],currentSum + nums[i]);
            maxSum = Math.max(currentSum,maxSum);
        }

        return maxSum;
    }
}

AI写代码bash
123456789101112

第k个数

leetcode.cn/problems/ge…

有些数的素因子只有 3,5,7,请设计一个算法找出第 k
个数。注意,不是必须有这些素因子,而是必须不包含其他的素因子。例如,前几个数按顺序应该是 1,3,5,7,9,15,21。

示例 1:

输入:k = 5 输出:9

维护一个最小堆,构造k*3个满足条件的数,选取第k个即可

import heapq

class Solution:
    def getKthMagicNumber(self, k: int) -> int:
        heap = [1]
        seen = set([1])

        for _ in range(k):
            x = heapq.heappop(heap)
            for factor in [3,5,7]:
                nx = x*factor
                if nx not in seen:
                    heapq.heappush(heap,nx)
                    seen.add(nx)
        return x

AI写代码bash
123456789101112131415