二分查找变形 -- 搜索具有重复元素的旋转数组

news/2025/3/1 10:23:38/

参考:81. 搜索旋转排序数组 II - 力扣(LeetCode)


 

思路:
    数组中有重复元素时,可能会影响二分查找的效果。通过判断 左右两边的值 是否相等,我们可以规避这种情况,调整搜索方向

参考代码:

python">def search(nums, target):left = 0right = len(nums) - 1while left <= right:mid = left + (right - left) // 2if nums[mid] == target:return mid# 处理重复元素# 由于该情况不能直接通过比较它们来判断当前区间的有序性。# 而是选择 缩小范围(通过 left += 1 和 right -= 1)来跳过重复元素,从而继续缩小搜索空间。# 如果我们不做任何处理,二分查找会陷入一个困境:它无法决定是向左还是向右搜索if nums[left] == nums[mid] == nums[right]:left += 1right -= 1elif nums[left] <= nums[mid]:  # mid左侧有序if nums[left] <= target < nums[mid]: # 在左侧内right = mid - 1else:  # 不在左侧内left = mid + 1else:  # mid右侧有序if nums[mid] < target <= nums[right]:left = mid + 1else:right = mid - 1return -1nums = [1,1,3,1,1,1,1] # 还可以变题,重复元素中第一个出现target的index,现在还不满足;后续补充
# nums = [2,5,6,0,0,1,2]
target = 1
print(search(nums, target)) # 输出3(index)

ps:输出部分自己修改一下Boolean型就好了


http://www.ppmy.cn/news/1575743.html

相关文章

芯麦GC1262E:电脑散热风扇驱动芯片的优质之选并可替代传统的APX9262S茂达芯片

在电脑硬件领域&#xff0c;散热风扇的性能对于电脑的稳定运行至关重要。而驱动芯片则是决定散热风扇能否高效、稳定工作的关键因素之一。芯麦GC1262E作为一款高性能的驱动芯片&#xff0c;逐渐成为电脑散热风扇等领域的热门选择&#xff0c;并可替代传统的APX9262S茂达芯片。 …

北京大学 DeepSeek内部研讨系列一:DeepSeek与AIGC应用(文末原文下载)

在人工智能领域&#xff0c;DeepSeek作为一个备受关注的项目&#xff0c;近期在北京大学举办的内部研讨系列讲座中引起了广泛的关注。本次研讨会的核心内容围绕DeepSeek的基本概念、大模型技术以及AIGC&#xff08;人工智能生成内容&#xff09;的应用展开&#xff0c;旨在帮助…

给大模型通过RAG挂上知识库

前言 因为大模型的知识库存在于训练期间&#xff0c;因此对于一些最新发生的事或者是专业性问题可能会出现不准确或者是幻觉&#xff0c;因此可以使用RAG技术给大模型外挂知识库来达到精准回答的目的。 实操 gpt4all 可以参考之前的文章&#xff1a;Llama模型私有化教程 他…

自然语言处理:稠密向量表示

介绍 大家好&#xff0c;博主又来给大家分享知识了。今天给大家分享的内容是稠密向量表示。看过我这篇博文自然语言处理&#xff1a;稀疏向量表示-CSDN博客的小伙伴们&#xff0c;心中可能会产生这样的疑问&#xff1a;既然存在稀疏向量这一概念&#xff0c;那么在自然语言处理…

Windows环境下安装Redis并设置Redis开机自启

文章目录 0. 前言1. 下载 Windows 版本的Redis2. 为 Redis 设置连接密码&#xff08;可选&#xff09;3. 启动 Redis4. 设置 Redis 开机自启 4.1 将 Redis 进程注册为服务4.2 设置 Redis 服务开机自启4.3 重启电脑测试是否配置成功4.4 关闭 Redis 开机自启&#xff08;拓展&am…

【GenBI实战】python脚本实现基于DeepSeek api的数据查询和图表可视化

写在前面 生成式 BI (GenBI) 正在改变我们与数据交互的方式。它允许用户使用自然语言提出问题&#xff0c;并自动获得数据洞察&#xff0c;而无需编写复杂的 SQL 查询或手动创建图表。本文将带你动手实战&#xff0c;使用 Python 和 DeepSeek API (或其他类似的大语言模型 API…

嵌入式轻量化SDK设计,EasyRTC音视频通话SDK压缩至500K-800K

在物联网和智能硬件飞速发展的今天&#xff0c;嵌入式设备的实时音视频通信能力变得愈发重要。然而&#xff0c;受限于硬件资源&#xff0c;尤其是Flash存储空间的不足&#xff0c;传统音视频通信方案往往难以在嵌入式设备上实现高效集成。 例如&#xff0c;智能摄像头需要实时…

PHP如何与HTML结合使用?

PHP与HTML结合使用的主要方式是通过在HTML文件中嵌入PHP代码&#xff0c;从而实现动态内容的生成和网页的交互性。以下是详细的方法和最佳实践&#xff1a; 1. 嵌入PHP代码到HTML中 PHP代码可以直接嵌入到HTML文件中&#xff0c;通过<?php ?>标签来包裹PHP代码。服务…