news 2026/4/30 19:25:04

LeetCode 指数搜索题解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode 指数搜索题解

LeetCode 指数搜索题解

题目描述

实现指数搜索算法,在一个有序整数数组中查找目标值。

示例

输入:[11, 12, 22, 25, 34, 64, 90],目标值:22
输出:2(目标值在数组中的索引)

解题思路

方法:指数搜索

思路

  • 指数搜索的核心思想是通过指数增长的方式快速定位目标值所在的区间,然后在该区间内进行二分搜索。
  • 具体步骤:
    1. 从数组的第一个元素开始,以指数增长的方式查找目标值。
    2. 如果当前位置的元素小于目标值,则将搜索范围扩大一倍。
    3. 如果当前位置的元素大于目标值,则在最后一次搜索范围的区间内进行二分搜索。
    4. 如果找到目标值,返回其索引;否则,返回 -1。

复杂度分析

  • 时间复杂度:O(log n),其中 n 是数组的长度。指数搜索的时间复杂度与二分搜索相同。
  • 空间复杂度:O(1),只需要常数级的额外空间。

代码实现

方法:指数搜索

# 指数搜索 def exponential_search(arr, target): n = len(arr) if n == 0: return -1 # 如果目标值在第一个位置 if arr[0] == target: return 0 # 以指数增长的方式查找目标值所在的区间 i = 1 while i < n and arr[i] < target: i *= 2 # 在区间 [i/2, min(i, n)) 内进行二分搜索 return binary_search(arr, target, i // 2, min(i, n) - 1) # 二分搜索(辅助函数) def binary_search(arr, target, left, right): while left <= right: mid = (left + right) // 2 if arr[mid] == target: return mid elif arr[mid] < target: left = mid + 1 else: right = mid - 1 return -1 # 测试 def test_exponential_search(): arr = [11, 12, 22, 25, 34, 64, 90] print(exponential_search(arr, 22)) # 输出:2 print(exponential_search(arr, 100)) # 输出:-1 print(exponential_search(arr, 11)) # 输出:0 if __name__ == "__main__": test_exponential_search()

测试用例

测试用例 1:基本情况

输入:[11, 12, 22, 25, 34, 64, 90],目标值:22
输出:2

测试用例 2:目标值不存在

输入:[11, 12, 22, 25, 34, 64, 90],目标值:100
输出:-1

测试用例 3:目标值在第一个位置

输入:[11, 12, 22, 25, 34, 64, 90],目标值:11
输出:0

总结

指数搜索是一种高效的搜索算法,它通过指数增长的方式快速定位目标值所在的区间,然后在该区间内进行二分搜索。指数搜索适用于有序数组,其时间复杂度为 O(log n),与二分搜索相同。

指数搜索的核心思想是:通过指数增长的方式快速定位目标值所在的区间,然后在该区间内进行二分搜索。

掌握指数搜索的原理和实现,对于理解搜索算法的基本思想非常重要。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 19:25:02

再见,返回按钮劫持:Google 2026 年新反垃圾政策深度解读

再见&#xff0c;返回按钮劫持&#xff1a;Google 2026 年新反垃圾政策深度解读 2026 年 4 月&#xff0c;Google 搜索团队悄然发布了一项新的反垃圾邮件政策&#xff0c;专门针对一个困扰了互联网用户多年的顽疾——“返回按钮劫持”&#xff08;Back Button Hijacking&#…

作者头像 李华
网站建设 2026/4/30 19:22:34

基于安卓的摄影作品展示与点评系统毕业设计

博主介绍&#xff1a;✌ 专注于Java,python,✌关注✌私信我✌具体的问题&#xff0c;我会尽力帮助你。一、研究目的本研究旨在设计并实现一款基于安卓操作系统的摄影作品展示与点评系统以解决现有摄影分享平台在移动端交互体验与内容管理方面的不足。随着智能手机摄影技术的普及…

作者头像 李华
网站建设 2026/4/30 19:19:31

ROCK 3C单板计算机:AI边缘计算与嵌入式开发指南

1. ROCK 3C单板计算机概述Radxa ROCK 3C&#xff08;又称ROCK 3 Model C&#xff09;是一款基于Rockchip RK3566-T Arm处理器的单板计算机&#xff08;SBC&#xff09;&#xff0c;采用与树莓派3 Model B相似的8556mm标准尺寸设计&#xff0c;但提供了更丰富的硬件接口和存储扩…

作者头像 李华
网站建设 2026/4/30 19:18:37

Mac Mouse Fix:将普通鼠标转变为macOS生产力利器

Mac Mouse Fix&#xff1a;将普通鼠标转变为macOS生产力利器 【免费下载链接】mac-mouse-fix Mac Mouse Fix - Make Your $10 Mouse Better Than an Apple Trackpad! 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix 如果你在macOS上使用第三方鼠标时感…

作者头像 李华
网站建设 2026/4/30 19:17:28

Phi-3.5-mini-instruct效果展示:对Vue3 Composition API做TypeScript类型推导

Phi-3.5-mini-instruct效果展示&#xff1a;对Vue3 Composition API做TypeScript类型推导 1. 模型简介与能力概述 Phi-3.5-mini-instruct是微软推出的轻量级开源指令微调大模型&#xff0c;在长上下文代码理解&#xff08;RepoQA&#xff09;和多语言MMLU等基准测试中表现优异…

作者头像 李华
网站建设 2026/4/30 19:11:35

完整指南:如何利用Parse12306自动化获取全国高铁数据

完整指南&#xff1a;如何利用Parse12306自动化获取全国高铁数据 【免费下载链接】Parse12306 分析12306 获取全国列车数据 项目地址: https://gitcode.com/gh_mirrors/pa/Parse12306 在构建铁路相关应用或进行交通数据分析时&#xff0c;获取准确、全面的列车数据是首要…

作者头像 李华