1.16 奇安信2024校招笔试真题

1.16.1 无助的产品经理

【题目描述】

在某厂,产品经理同学的工作职责除了给开发同学提需求,还有一件极其重要的事:对产品运营数据做归因分析。

某天,该产品经理同学接到老板要求:根据在过去一段时间内产品的“每日活跃用户数”,统计出最长的增长总天数,也就是把保持增长势头(可以不连续)的天数抽出来,你可能会得到多个新序列,计算最长的那个序列的总天数。

我们把该产品自上线以来“每日的活跃用户数”,都按照顺序放入一个数组,比如:

[1,5,122,34,45,232,342,34],以这组数据为例,把其中所有的增长子序列罗列出来:

形成了

第一个子序列: [1,5,122]

第二个子序列:[34,45,232,342]

第三个子序列:[1,5,122,232,342]

第四个子序列:[1,5,34,45,232,342]

这四个序列,其中最长的是第四个,所以这个例子中,最长的增长总天数是:6

因为该产品上线时间有十几年了,产品同学数了1个小时,眼都数花了,最后只好放弃,她决定用请开发同学吃饭,来解决这个问题,你能帮帮她吗?

备注:

如果数据集中有多个“最长“增长序列,只需返回其长度即可。

输入样例:

[10,9,2,5,3,6,101,18]

输出样例:

4

说明:

最长增长的子序列为 [2,3,6,101] 或者 [2,5,6,101]或者[2,3,6,18]或者[2,5,6,18],所以返回长度 4。

【解题思路】

本质上是最长连续序列问题,动态规划、哈希表。

【参考代码】

package main

func lengthOfLIS(nums []int) int {

if len(nums) == 0 {

return 0

}

dp := make([]int, len(nums))

for i := range dp {

dp[i] = 1

}

max := 1

for i := 1; i < len(nums); i++ {

for j := 0; j < i; j++ {

if nums[i]

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

2024校招宝典——软件版本 文章被收录于专栏

牛客独家出品,理工科求职必备攻略,适合岗位: 软件开发、数据库分析、软件测试、前端后端开发

全部评论

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务