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

让人做网站 需要准备什么软件查看网站dns服务器

让人做网站 需要准备什么软件,查看网站dns服务器,怎么到百度做网站,北京建网站公司飞沐文章目录 问题描述解决思路代码实现关键点解析1. 为什么用 nums[left] < nums[mid]&#xff1f;2. 示例分析案例 1&#xff1a;数组 [3, 1]&#xff0c;目标值 1案例 2&#xff1a;数组 [5]&#xff0c;目标值 5 边界条件处理1. 单元素数组2. 完全有序数组3. 严格递增与重复…

文章目录

    • 问题描述
    • 解决思路
    • 代码实现
    • 关键点解析
      • 1. 为什么用 `nums[left] <= nums[mid]`?
      • 2. 示例分析
        • 案例 1:数组 `[3, 1]`,目标值 `1`
        • 案例 2:数组 `[5]`,目标值 `5`
    • 边界条件处理
      • 1. 单元素数组
      • 2. 完全有序数组
      • 3. 严格递增与重复值
    • 常见疑问
      • Q:为什么不能使用 `nums[left] < nums[mid]`?
    • 总结

问题描述

在旋转后的有序数组中搜索目标值。假设数组原本按升序排列,但在某个未知下标处进行了旋转(例如 [0,1,2,4,5,6,7] 旋转后可能变为 [4,5,6,7,0,1,2])。要求时间复杂度为 O(log n)

示例:

输入:nums = [4,5,6,7,0,1,2], target = 0  
输出:4  
解释:目标值 0 位于旋转后的右半部分。

解决思路

旋转后的数组可视为两个有序子数组的组合。利用 二分查找 的关键在于判断哪一部分是有序的,并检查目标值是否在该范围内。核心步骤如下:

  1. 判断有序区间:通过比较 nums[left]nums[mid],确定左半或右半是否有序。
  2. 缩小搜索范围:根据目标值是否在有序区间内,调整左右指针。

代码实现

class Solution {public int search(int[] nums, int target) {int left = 0, right = nums.length - 1;while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] == target) return mid; // 直接命中// 判断左半部分是否有序if (nums[left] <= nums[mid]) { // 目标值在左半有序区间内if (target >= nums[left] && target < nums[mid]) {right = mid - 1;} else {left = mid + 1;}} else { // 右半部分有序// 目标值在右半有序区间内if (target > nums[mid] && target <= nums[right]) {left = mid + 1;} else {right = mid - 1;}}}return -1;}
}

关键点解析

1. 为什么用 nums[left] <= nums[mid]

  • 判断有序区间
    nums[left] <= nums[mid],说明左半部分 [left, mid] 是有序的(未包含旋转点)。否则右半部分有序。
  • 边界处理
    left == mid 时(例如数组长度为 1),nums[left] == nums[mid],等号确保这种情况被正确归类为“左半有序”。

2. 示例分析

案例 1:数组 [3, 1],目标值 1
  • left = 0, mid = 0,满足 nums[left] <= nums[mid](3 ≤ 3)。
  • 目标值不在左半部分(1 < 3 不成立),调整 left = mid + 1,最终找到目标值。
案例 2:数组 [5],目标值 5
  • 若去掉等号,条件 nums[left] < nums[mid] 不成立,程序误判右半有序。
  • 检查右半部分时,target > nums[mid] 不成立,错误调整 right = mid - 1,导致返回 -1

边界条件处理

1. 单元素数组

nums.length == 1 时,left == mid == right,必须通过等号确保逻辑正确。

2. 完全有序数组

若数组未旋转(例如 [1,2,3,4,5]),逻辑仍能正确判断左半有序。

3. 严格递增与重复值

题目假设元素唯一,无需处理重复值。若存在重复值需调整条件(如 nums[left] < nums[mid])。


常见疑问

Q:为什么不能使用 nums[left] < nums[mid]

  • 边界问题:当 left == mid 时,条件不成立,导致误判右半有序。
  • 错误示例
    数组 [5],目标值 5。若用 <,程序错误调整 right = mid - 1,最终返回 -1

总结

  1. 核心逻辑:通过 nums[left] <= nums[mid] 判断有序区间,结合目标值范围调整指针。
  2. 边界条件:等号处理 left == mid 的临界情况,确保单元素区间被正确识别。
  3. 时间复杂度:O(log n),每次循环将搜索范围减半。

关键启示:二分查找的难点不仅在于算法框架,更在于对边界条件的精准处理。理解每一行代码背后的意图,才能避免“差之毫厘,谬以千里”。

http://www.dtcms.com/a/410293.html

相关文章:

  • LangChain第三页【操作指南】_【如何缓存对话模型响应】翻译完成
  • 移动硬盘上的文件消失了?以下是Mac电脑解决方法
  • AWS Route 53 详解:不只是 DNS,还能做智能流量调度
  • AWS EKS + Karpenter Spot实例优化实践指南
  • docker和k3s安装kafka,go语言发送和接收kafka消息
  • GraphRAG(知识图谱结合大模型)对人工智能中自然语言处理的深层语义分析的影响与启示
  • 石化建设分会网站广州市城市建设档案馆网站
  • 建网站是自己做还是用CMS邢台做网站咨询
  • MySQL GTID一致性错误全解析:从连接池复用到完美解决方案
  • PostgreSQL表备份并重命名出现索引、外键仍指向旧表,恢复后仍失败的问题
  • 【生态再升级】IvorySQL 4.5 与银河麒麟高级服务器操作系统V11完成适配认证!
  • 智慧团建系统官方网站登录网站制作 呼和浩特
  • 个体商户建自己的网站做销售小广告怎么能弄干净
  • 设计模式(C++)详解——迭代器模式(2)
  • perl踩坑系列=====正则表达式捕获
  • MQ-2烟雾传感器详解——从工作原理到实际应用
  • Ubuntu启动终端时默认窗口最大化
  • 整站seo排名郑州经济技术开发区政务服务中心
  • 求一些做里番的网站php网站建设实训引言
  • 嵌入用户idea到大模型并针对Verilog语言生成任务的微调实验报告
  • 【AI算力系统设计分析】1000PetaOps 算力云计算系统设计方案(大模型训练推理专项版)
  • JAVA露营基地预约户外露营预约下单系统小程序
  • ✨WPF编程基础【1.2】:XAML中的属性
  • 【MySQL】性能优化与核心机制深度解析
  • 珠海 网站建设和推广网站建设服务方案ppt模板下载
  • JUC:AQS源码分析(三)
  • 极简文件列表
  • CSS Grid 网格布局完整指南:从容器到项目,实战详解
  • 百度手机模板网站阿里云WordPress主题
  • 批量获取oracle的AWR报告方法