腾讯微保社招笔试
博主最近参加了腾讯的社招笔试,分享给大家作参考
最大子数组和
https://leetcode.cn/problems/maximum-subarray/description/
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组是数组中的一个连续部分。
定义 current_sum 表示以当前元素结尾的最大子数组和
遍历数组:
current_sum = max(num, current_sum + num)
如果 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;}
}
第k个数
https://leetcode.cn/problems/get-kth-magic-number-lcci/description/
有些数的素因子只有 3,5,7,请设计一个算法找出第 k
个数。注意,不是必须有这些素因子,而是必须不包含其他的素因子。例如,前几个数按顺序应该是 1,3,5,7,9,15,21。示例 1:
输入:k = 5 输出:9
维护一个最小堆,构造k*3个满足条件的数,选取第k个即可
import heapqclass 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*factorif nx not in seen:heapq.heappush(heap,nx)seen.add(nx)return x