当前位置: 首页 > news >正文

【C/C++】无限长有序数组中查找特定元素

在无限长有序数组中查找特定元素,由于数组长度未知,需先定位搜索范围,再进行二分查找。以下是C++实现:

#include <iostream>
#include <vector>
#include <climits>
using namespace std;// 假设数组访问函数,实际使用时需根据具体环境实现
// 示例中假设数组元素为int,若索引超出实际存储范围返回INT_MAX
int get(int index) {// 实际实现需替换为访问数组的逻辑// 这里仅为示例,假设数组在内存中足够大或通过其他方式访问static vector<int> arr = {1, 3, 5, 7, 9, 11, /* ... 无限有序元素 ... */};if (index < arr.size()) return arr[index];return INT_MAX; // 索引超界返回最大值(假设数组递增)
}int searchInfiniteArray(int target) {int low = 0;int high = 1;// 步骤1:指数扩展确定搜索范围while (get(high) < target) {low = high;        // 移动下界high = high * 2;   // 上界指数扩展}// 步骤2:标准二分查找while (low <= high) {int mid = low + (high - low) / 2;int midVal = get(mid);if (midVal == target) {return mid;  // 找到目标} else if (midVal < target) {low = mid + 1;} else {high = mid - 1;}}return -1;  // 未找到
}int main() {int target = 7;int index = searchInfiniteArray(target);if (index != -1) {cout << "元素 " << target << " 位于索引 " << index << endl;} else {cout << "元素 " << target << " 不存在" << endl;}return 0;
}

关键步骤解析:

  1. 动态确定搜索范围

    • 初始化 low = 0, high = 1
    • 循环扩展:当 high 处元素小于目标时,将 low 移至 highhigh 倍增
    • 终止条件:high 处元素 ≥ 目标或超界(返回 INT_MAX
  2. 二分查找

    • 在确定的 [low, high] 区间内执行标准二分查找
    • 通过 get(index) 访问元素值
    • 找到目标返回索引,否则返回 -1

注意事项:

  • 时间复杂度O(log T)T 为目标元素的索引位置
  • 数组访问函数:需根据实际环境实现 get(index),若索引超界应返回足够大的值(如 INT_MAX
  • 边界处理:当目标大于所有元素时,循环因超界终止,二分查找返回 -1
  • 适用场景:适用于动态增长的有序数据流(如日志文件、实时数据流)

此方法高效利用指数扩展快速定位搜索范围,再通过二分查找精确匹配,适合处理无限或极大尺寸的有序数据集。

http://www.xdnf.cn/news/737551.html

相关文章:

  • 语音通信接通率、应答率和转化率有什么区别?
  • (20)Java 在 AI ML 领域应用
  • Spring AI开发跃迁指南(第二章:急速上手5——Spring AI 结构化输出源码级原理详解及使用实例)
  • 电动飞行器(eVTOL)动力测试实验室系统方案
  • JavaScript正则表达式
  • 精通 Kubernetes:从故障排除到化繁为简
  • MySql--定义表存储引擎、字符集和排序规则
  • 前端面试题目-高频问题集合
  • 用OLEDB读取EXCEL时,单元格内容长度超过255被截断
  • 痉挛性斜颈相关内容说明
  • 换行符在markdown格式时异常2
  • 智能化能源管理系统在“双碳”背景下的新价值
  • 本地部署Ollama DeepSeek-R1:8B,接入Cherry Studio
  • 优先队列用法
  • [正点原子]ESP32S3 RGB屏幕移植LVGL
  • 基本数据指针的解读-C++
  • 数据即资产:GEO如何重塑企业的信息价值链
  • 电子电路:D触发器的工作原理及应用详解
  • 在Mathematica中使用WhenEvent求解微分方程
  • java代码性能优化
  • MODIS火点数据下载
  • 人工智能时代Agent与MCP区别联系
  • 001在线拍卖系统技术揭秘:构建高效交互的竞拍平台
  • JS浮点数精度问题
  • WebFuture:网站部分图片突然无法显示的原因
  • 身份证发给别人怎么加水印?赛文奥特曼身份证添加水印教程
  • 大模型应用开发第九讲:RAG(检索增强生成)流程:用户查询→检索→生成响应
  • CQF预备知识:Python相关库 -- NumPy 基础知识 - 通用函数
  • xilinx位置约束
  • SAR ADC 比较器噪声分析(二)