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

陕西企业电脑网站制作高端网站开发程

陕西企业电脑网站制作,高端网站开发程,贵阳手机网站制作,百度模拟点击704. 二分查找 已解答 简单 相关标签 相关企业 给定一个 n 个元素有序的#xff08;升序#xff09;整型数组 nums 和一个目标值 target #xff0c;写一个函数搜索 nums 中的 target#xff0c;如果目标值存在返回下标#xff0c;否则返回 -1。 示例 1: 输入: nu…704. 二分查找 已解答 简单 相关标签 相关企业 给定一个 n 个元素有序的升序整型数组 nums 和一个目标值 target  写一个函数搜索 nums 中的 target如果目标值存在返回下标否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输出: 4 解释: 9 出现在 nums 中并且下标为 4示例 2: 输入: nums [-1,0,3,5,9,12], target 2 输出: -1 解释: 2 不存在 nums 中因此返回 -1提示 你可以假设 nums 中的所有元素是不重复的。n 将在 [1, 10000]之间。nums 的每个元素都将在 [-9999, 9999]之间。 from typing import Listclass Solution:def search(self, nums: List[int], target: int) - int:# 初始化左边界和右边界left, right 0, len(nums) - 1# 当左边界小于等于右边界时继续搜索while left right:# 计算中点索引避免直接相加导致溢出mid (right - left) // 2 leftnum nums[mid] # 获取中点位置的元素# 检查中点位置的元素是否等于目标值if num target:return mid # 如果找到了目标值返回中点索引# 如果中点的元素大于目标值缩小右边界至中点的左侧elif num target:right mid - 1# 如果中点的元素小于目标值缩小左边界至中点的右侧else:left mid 1# 如果循环结束仍未找到目标值返回 -1return -1注释解释 初始化左右边界:left 设置为数组的起始位置 0right 设置为数组的末尾位置 len(nums) - 1表示我们将要在整个数组范围内查找目标值。 循环条件: 通过 while left right 控制搜索范围当 left 超过 right 时说明目标值不存在于数组中退出循环。 计算中点:mid (right - left) // 2 left 用于计算当前 left 和 right 之间的中点保证计算不会因直接相加而导致溢出问题。 目标值检查: 如果找到了目标值 nums[mid] target直接返回 mid 索引算法结束。如果目标值比中点元素小 num target说明目标值在中点左侧因此将 right 更新为 mid - 1缩小搜索范围。如果目标值比中点元素大 num target说明目标值在中点右侧因此将 left 更新为 mid 1。 返回 -1: 如果循环结束且没有找到目标值则返回 -1 表示目标值不存在于数组中。   class Solution {public int search(int[] nums, int target) {// 初始化左右边界int left 0, right nums.length - 1;// 当左边界小于等于右边界时继续二分查找while (left right) {// 计算中点索引避免直接相加导致溢出int mid (right - left) / 2 left;int num nums[mid]; // 获取中点位置的元素// 检查中点位置的元素是否等于目标值if (num target) {return mid; // 如果找到目标值返回中点索引} // 如果中点元素大于目标值则缩小搜索范围到左半边else if (num target) {right mid - 1;} // 如果中点元素小于目标值则缩小搜索范围到右半边else {left mid 1;}}// 如果循环结束仍未找到目标值返回 -1return -1;} }二分查找 为什么mid right // 2这样不行 需要mid (right - left) // 2 left 在二分查找中mid的计算需要使用(right left) // 2或(right - left) // 2 left而不是right // 2。这是因为mid right // 2会导致错误的中点计算特别是在left不为0的情况下。这里是原因的具体分析 错误的中点计算当你直接用mid right // 2时计算出的中点并没有考虑left的偏移量。这会导致在某些情况下特别是当left不为0时mid指向数组的错误位置从而导致算法无法正常工作。 正确的中点计算mid (right left) // 2或mid (right - left) // 2 left能够动态计算出当前搜索范围的中点位置从而确保了二分查找的正确性。 right - left确保了范围的长度。 left将中点偏移到当前搜索范围的开头避免忽略left的影响。 避免溢出在某些编程语言中直接用(right left) // 2可能导致溢出如果right和left都很大而(right - left) // 2 left可以规避这一问题Python中不存在这个问题因为它的int是动态扩展的。 因此推荐使用 mid (right left) // 2 或 mid (right - left) // 2 left 来确保算法的正确性和稳定性。
http://www.w-s-a.com/news/454537/

相关文章:

  • 漳浦网站建设网络营销推广策略
  • 龙岗商城网站建设教程百度关键词排名突然没了
  • 深圳网站建设服务哪家有织梦网站模板安装
  • 网站设计与网页制作代码大全网站开发还找到工作吗
  • 给设计网站做图会字体侵权吗站长工具seo综合查询张家界新娘
  • 网站的建设与颜色搭配win7在iis中新建一个网站
  • 单位做网站有哪些功能型类的网站
  • 网站怎样做优惠卷移动互联网开发培训
  • 重庆网站建设帝维科技网站做定向的作用
  • 网站建设工作室wp主题模板做污事网站
  • 网站建设 深圳 凡科重庆家居网站制作公司
  • 自己也可以免费轻松创建一个网站企业收录网站有什么用
  • 帮别人做网站违法导航网站开发工具
  • seo网站外包公司字画价格网站建设方案
  • 网站国内空间价格销售技巧
  • 广安建设企业网站qq互联网站备案号
  • 京东网站建设的要求vs2010做的网站
  • wordpress 新闻杂志主题佛山企业网站排名优化
  • 选服务好的网站建设金华市开发区人才网
  • 广州建站商城南阳高质量建设大城市网站
  • 网站建设合同封面模板做代炼的网站
  • 外贸网站建站要多少钱南昌优化排名推广
  • 做公司网站的尺寸一般是多大企业管理网站
  • 苏州网站设计公司兴田德润i简介做签证宾馆订单用啥网站
  • 网站页面设计工具做网站租空间
  • 做智能网站系统百度提交入口
  • 网站建设代理商电话网站规划和建设方案
  • 双桥区网站制作seo 首页
  • 电子商务网站建设前期准备wordpress域名指向二级目录
  • 汕头建站网站模板淮北做网站电话