算法笔试模拟题精解之“破译密码”

简介: 可以使用尺取法来解题;设当前区间为[L, R]。初始L = R = 0;使用尺取法需要判断什么时候调整L和R。

在线编程介绍

阿里云开发者社区在线编程产品,针对广大开发者学习、实践、面试、应聘、考试认证等打造的免费在线刷题神器。题库来自笔试模拟题、算法大赛模拟题等,界面整洁明了,操作简单,为用户营造专心答题的学习环境。点击链接开始体验:https://developer.aliyun.com/coding

本文为大家介绍其中的 第97题:破译密码 的题目解析,具体如下:

题目描述

题目等级:中等
知识点:尺取法

查看题目:破译密码
给你一个长度为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)。

输出满足条件的子序列个数。
示例1
输入:
4
2
[1 ,2 ,1 ,2]
输出:
3
注意
三个子序列分别为[1,3],[1,4],[2,4]

解题思路:尺取法

与57超级区间那道题是类似的方法。

设当前区间为[L, R]。初始L = R = 0;使用尺取法需要判断什么时候调整L和R。
情况1:假设对于某个区间[L1, R1]满足题目要求。则保持L1不变,依次增加R1直到n为止的所有区间都满足题目的要求。
情况2:假设对于某个区间[L2,R2]不满足题目要求。则需要保持L2不动,增加R2才可能满足满足题目要求。
情况3:是情况2拓展。如果[L2,n]不满足题目要求,则任何i>L2,区间[i, n]都不满足题目要求。
使用一个 2*n 的数组numb来记录当前区间[L, R]内每个元素的出现次数。numbL和numbR表示区间[L, R]对应的numb数组范围。因为每个数都是按照进入区间[L, R]的顺序离开区间[L, R]的,相当于一个队列,所以numb数组可以用numbL和numbR来表示当前区间[L, R]内的元素,而不用考虑中间某个数不在区间[L, R]内的情况。
计算过程

  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++。

时间复杂度O(n^2) 修改之前最差为O(n^2)
空间复杂度O(2*n) numb数组的空间

看完之后是不是有了想法了呢,快来练练手吧>>查看题目:破译密码
image.png

相关文章
|
存储 安全 算法
|
算法 安全 Unix
[RFC6238] TOTP: 基于时间的一次性密码生成算法
[RFC6238] TOTP: 基于时间的一次性密码生成算法
417 0
|
机器学习/深度学习 数据采集 算法
解码癌症预测的密码:可解释性机器学习算法SHAP揭示XGBoost模型的预测机制
解码癌症预测的密码:可解释性机器学习算法SHAP揭示XGBoost模型的预测机制
1315 0
|
机器学习/深度学习 存储 算法
解锁文件共享软件背后基于 Python 的二叉搜索树算法密码
文件共享软件在数字化时代扮演着连接全球用户、促进知识与数据交流的重要角色。二叉搜索树作为一种高效的数据结构,通过有序存储和快速检索文件,极大提升了文件共享平台的性能。它依据文件名或时间戳等关键属性排序,支持高效插入、删除和查找操作,显著优化用户体验。本文还展示了用Python实现的简单二叉搜索树代码,帮助理解其工作原理,并展望了该算法在分布式计算和机器学习领域的未来应用前景。
|
存储 算法 Java
解锁“分享文件”高效密码:探秘 Java 二叉搜索树算法
在信息爆炸的时代,文件分享至关重要。二叉搜索树(BST)以其高效的查找性能,为文件分享优化提供了新路径。本文聚焦Java环境下BST的应用,介绍其基础结构、实现示例及进阶优化。BST通过有序节点快速定位文件,结合自平衡树、多线程和权限管理,大幅提升文件分享效率与安全性。代码示例展示了文件插入与查找的基本操作,适用于大规模并发场景,确保分享过程流畅高效。掌握BST算法,助力文件分享创新发展。
|
存储 人工智能 算法
解锁分布式文件分享的 Java 一致性哈希算法密码
在数字化时代,文件分享成为信息传播与协同办公的关键环节。本文深入探讨基于Java的一致性哈希算法,该算法通过引入虚拟节点和环形哈希空间,解决了传统哈希算法在分布式存储中的“哈希雪崩”问题,确保文件分配稳定高效。文章还展示了Java实现代码,并展望了其在未来文件分享技术中的应用前景,如结合AI优化节点布局和区块链增强数据安全。
|
JavaScript 算法 安全
深度剖析:共享文件怎么设置密码和权限的 Node.js 进阶算法
在数字化时代,共享文件的安全性至关重要。本文聚焦Node.js环境,介绍如何通过JavaScript对象字面量构建数据结构管理文件安全信息,包括使用`bcryptjs`库加密密码和权限校验算法,确保高效且安全的文件共享。通过实例代码展示加密与权限验证过程,帮助各行业实现严格的信息资产管理与协作。
|
12月前
|
存储 算法 测试技术
【狂热算法篇】探秘图论之 Floyd 算法:解锁最短路径的神秘密码(通俗易懂版)
【狂热算法篇】探秘图论之 Floyd 算法:解锁最短路径的神秘密码(通俗易懂版)
|
12月前
|
算法 安全 调度
【动态规划篇】穿越算法迷雾:约瑟夫环问题的奇幻密码
【动态规划篇】穿越算法迷雾:约瑟夫环问题的奇幻密码
|
12月前
|
存储 人工智能 算法
【深度优先搜索篇】走迷宫的魔法:算法如何破解迷宫的神秘密码
【深度优先搜索篇】走迷宫的魔法:算法如何破解迷宫的神秘密码