博主最近参加了腾讯的社招笔试,分享给大家作参考
最大子数组和
给你一个整数数组 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个数
有些数的素因子只有 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