251101 record closest-equal-element-queries
1 | vector<int> solveQueries(vector<int>& nums, vector<int>& queries) { |
跟它类似的还有比如981. 基于时间的键值存储
这类题型的本质是:对于某个属性相同的元素,需要在它们的位置序列中进行高效查找。
流程:
flowchart TD
A[开始:读取输入数据] --> B[建立值-vector映射表]
B --> C{遍历原数组/序列}
C --> D[将每个元素的值作为key<br/>将其序号加入对应的vector]
D --> E{是否遍历完成?}
E -->|否| C
E -->|是| F[处理查询]
F --> G{遍历每个查询}
G --> H[获取查询的目标值]
H --> I{映射表中是否存在该值?}
I -->|否| J[返回-1或默认值]
I -->|是| K[获取该值对应的位置序列]
K --> L[在位置序列上进行二分查找]
L --> M[使用lower_bound/upper_bound<br/>找到合适的位置]
M --> N[检查前后相邻位置]
N --> O[计算距离/时间差<br/>选择最优解]
O --> P[记录查询结果]
P --> Q{是否处理完所有查询?}
Q -->|否| G
Q -->|是| R[返回所有查询结果]
J --> Q
style A fill:#e1f5fe
style B fill:#f3e5f5
style L fill:#fff3e0
style R fill:#e8f5e8
classDef keyStep fill:#ffeb3b,stroke:#f57f17,stroke-width:2px
class B,L keyStep
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Elian's blog page!