开发者社区> 问答> 正文

遇到一个破译密码的问题,求解答。

给你一个长度为 n 的序列,元素标号 1-n。问能够找到多少对不同的(L,R)(1<=L<=R),使得在子序列 [L,R] 内存在出现频率不低于K的元素?输入序列大小 n(1<=n<=10^4)、出现频率 k(1<= k<= n)和一个包含 n 个整数的数组,第 i 个整数表示序列的第 i 个元素为 ai(1<=ai<=10^9)。输出满足条件的子序列个数。

展开
收起
游客4skzfvnrxrzbi 2021-12-23 16:53:59 449 0
1 条回答
写回答
取消 提交回答
  • 1.初始 L =R= 0;sum=0;用来计算满足条件的区间个数 2.判断区间[L, R]的情况,满足情况 1,则 sum++; R++。满足情况 2,L++。满足情况 3,结束计算。 3.R 每次加 1,都要给numb数组中对应的数出现次数+1。当是一个新数时,要使 numbR++; 4.L 每次减 1,都要给numb数组中对应的数出现次数-1。当减为 0 时,要使 numbL++ 对于情况1,因为L不变时,后面的所有R都满足条件,所以可以修改为sum+=n-R+1,L++。 因此输入:4 2 [1,2,1 ,2] 输出:3 注:三个子序列分别为 [1,3],[1,4],[2,4]

    2021-12-23 18:45:30
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关实验场景

更多