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

一个网站的建设方案北京网站维护公司

一个网站的建设方案,北京网站维护公司,企业网站哪家好,长春火车站出入最新规定目录 1 问题描述 1.1 示例1 1.2 示例2 1.3 示例3 2 解题思路 2.1 二分查找法 3 代码实现 4 代码解析 4.1 初始化 4.2 二分法查找 4.3 返回结果 5 总结 1 问题描述 请实现无重复数字的升序数组的二分查找 给定一个 元素升序的、无重复数字的整型数组 nums 和一个目…

目录

1 问题描述

1.1 示例1

1.2 示例2

1.3 示例3

2 解题思路

2.1 二分查找法

3 代码实现

4 代码解析

4.1 初始化

4.2 二分法查找

4.3 返回结果

5 总结


1 问题描述

请实现无重复数字的升序数组的二分查找

给定一个 元素升序的、无重复数字的整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标(下标从 0 开始),否则返回 -1

数据范围:0≤len(nums)≤2×1050≤len(nums)≤2×105 , 数组中任意值满足 ∣val∣≤109∣val∣≤109

进阶:时间复杂度 O(log⁡n)O(logn) ,空间复杂度 O(1)O(1)

1.1 示例1

输入:

[-1,0,3,4,6,10,13,14],13

返回值:

6

说明:

13 出现在nums中并且下标为 6     

1.2 示例2

输入:

[],3

返回值:

-1

说明:

nums为空,返回-1     

1.3 示例3

输入:

[-1,0,3,4,6,10,13,14],2

返回值:

-1

说明:

2 不存在nums中因此返回 -1    

2 解题思路

首先,定义左右边界 leftright,并进行边界检查,若数组为空,则直接返回 -1。接着,进入 while 循环,采用二分查找法进行搜索。mid 计算方式为 left + (right - left + 1) / 2,确保 mid 更靠近右侧,以防止死循环。当 nums[mid] 小于等于 target 时,说明目标值可能在 mid 及其右侧,因此 left = mid;否则,缩小搜索范围,将 right 设为 mid - 1。循环结束后,检查 nums[left] 是否等于 target,若相等返回索引 left,否则返回 -1

2.1 二分查找法

当数组的长度为奇数时:

当数组的长度为偶数时:

3 代码实现

    int search(vector<int>& nums, int target) {// write code hereint left = 0;int right = nums.size()-1;if(right == -1) return -1;while(left < right){int mid = left + (right - left + 1)/2;if(nums[mid] <= target){left = mid;}else {right = mid - 1;}}if(nums[left] == target) return left;else return -1;}

4 代码解析

4.1 初始化

    int left = 0;int right = nums.size() - 1;if (right == -1) return -1;

初始化左右边界:left = 0right = nums.size() - 1,表示搜索范围是整个数组。

特殊情况处理:如果 right == -1,说明数组为空,直接返回 -1

4.2 二分法查找

        while(left < right){int mid = left + (right - left + 1)/2;if(nums[mid] <= target){left = mid;}else {right = mid - 1;}}

使用右偏二分查找,mid 取右侧值,确保 left 指向 target 可能存在的位置。若 nums[mid] <= target,更新 left = mid,否则缩小 right = mid - 1,逐步缩小搜索范围,最终确定 target 的位置。

4.3 返回结果

    if (nums[left] == target) return left;else return -1;

如果 nums[left] == target,说明找到了 target,返回索引 left。否则,说明 target 不存在,返回 -1

5 总结

代码使用右偏二分查找,mid 取右侧值,确保 left 指向 target 可能存在的位置。nums[mid] ≤ target 时,left = mid,否则 right = mid - 1,逐步缩小搜索范围。然而,while(left < right) 可能导致 left 无法有效更新,出现死循环。因此,更安全的做法是使用 left <= right 作为循环条件,并调整 mid 计算方式,以确保二分查找能够正确收敛,提高算法的稳定性和可靠性。

http://www.dtcms.com/wzjs/167584.html

相关文章:

  • 专业网站建设价格企业网络营销策划案例
  • 免费网站建设平台手机优化是什么意思
  • 加盟网站模板常用的关键词挖掘工具有哪些
  • iis8.5 wordpress北京网站优化seo
  • 邯郸网站建设企业提高工作效率的方法
  • 黄冈网站排名最高国内手机搜索引擎十大排行
  • 外加工网优化法治化营商环境
  • 怎么查看网站是哪个公司做的国外免费域名
  • 中国开头的网站怎么做seo快速优化技术
  • 有没有可以做翻译的网站吗营销型网站seo
  • 台湾网站建设优化seo教程技术
  • 做面食视频网站网络营销五个主要手段
  • 线上运营公司seo中国
  • 电商型网站建设价格营业推广案例
  • 大连网站建设 领超最好互联网产品推广是做什么的
  • wordpress 安装 数据库重庆seo整站优化外包服务
  • 个人网站能干嘛爱网站关键词挖掘
  • 网站开发的母的目的和意义.网络营销课程培训机构
  • wordpress主题分享功能快速排序优化
  • 中文设计网站搜索引擎优化是什么意思啊
  • 上海到北京的机票武汉seo引擎优化
  • 利用花生壳做网站百度极速版客服人工在线咨询
  • 怎样自己做企业的网站制作自己的网站
  • 江油网站制作自己做的网站怎么推广
  • wordpress 标题换行沈阳seo整站优化
  • 专业的网站制作专业公司名站在线
  • wordpress好看的页面西安优化网站公司
  • 网站开发常用形状新野seo公司
  • ui设计的尺寸seo网络推广到底是做什么的
  • 网站建设用到什么软件怎么样推广自己的网站