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

网站备案更换主体建设银行正式宣布

网站备案更换主体,建设银行正式宣布,陇南市建设局官方网站,韩国优秀平面设计网站有哪些一. 简介 上一篇文章对力扣网上"有序数组中查找目标值范围"题目进行了普通的解法。文章如下: 力扣网C语言编程题:在数组中查找目标值位置之暴力解法-CSDN博客 本文使用二分查找法进行实现,因为二分查找法符合题目要求&#xff0…

一. 简介

上一篇文章对力扣网上"有序数组中查找目标值范围"题目进行了普通的解法。文章如下:

力扣网C语言编程题:在数组中查找目标值位置之暴力解法-CSDN博客

本文使用二分查找法进行实现,因为二分查找法符合题目要求(时间复杂度为 O(log n))。

二.  力扣网C语言编程题:在数组中查找目标值位置之二分查找法

题目:在排序数组中查找元素的第一个和最后一个位置

给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target,返回 [-1, -1]。
你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。

示例 1:
输入:nums = [5,7,7,8,8,10], target = 8
输出:[3,4]

示例 2:
输入:nums = [5,7,7,8,8,10], target = 6
输出:[-1,-1]

示例 3:
输入:nums = [], target = 0
输出:[-1,-1]

提示:
    0 <= nums.length <= 105
    -109 <= nums[i] <= 109
    nums 是一个非递减数组
    -109 <= target <= 109

1. 解题思路二:(二分查找法)

题目说数组是非递减序列,也就是说数组元素从左到右元素是不严格递增的,即每个元素大于或等于前一个元素。有序序列中查找一个目标值,符合 "二分查找法" 的特点。

首先,查找target 第一次出现的位置,并记录下来;

其次,查找target最后一次出现的位置,并记录下来;

C语言实现如下:

//二分查找法
int* searchRange(int* nums, int numsSize, int target, int* returnSize){int* ret_ptr = (int*)malloc(2*sizeof(int));ret_ptr[0] = -1;ret_ptr[1] = -1;if((nums == NULL) || (numsSize <= 0) || (returnSize == NULL)) {return ret_ptr;}*returnSize = 2;//查找第一次出现的位置int left = 0;int right = numsSize-1;int mid = 0;while(left <= right) {mid = (left+right) / 2;if(nums[mid] >= target) {//向左收缩区间right = mid - 1;}else { //nums[mid] < target, 向右收缩区间left = mid + 1;}}//需要额外判断是否真的找到了targetif((left < numsSize) && (nums[left] == target)) {ret_ptr[0] = left;}else{return ret_ptr;}//查找最后一次出现的位置right = numsSize-1;while(left <= right) {mid = (left + right) / 2;if(nums[mid] <= target) {//向右收缩区间left = mid + 1;}else {//nums[mid] > target,向左收缩区间right = mid - 1;}}ret_ptr[1] = right;return ret_ptr;
}

(1) 查找目标值 target 第一次出现的位置的实现思路?

目标:

找到第一个等于 target 的索引。换句话说,我们要找到最小的下标 i,使得 nums[i] == target。

理解逻辑的关键点

注意: 这段二分查找不是寻找 “等于”,而是不断缩小范围,直到 left 指向第一个满足条件的元素。

思路拆解:

    我们始终维护一个区间 [left, right],表示目标值可能在这个区间内。
    如果 nums[mid] < target:说明要找的目标在右边,于是 left = mid + 1
    如果 nums[mid] >= target:说明目标可能在左边或当前位置,于是 right = mid - 1

    注意:即使 nums[mid] == target,我们也继续往左找,看看有没有更早的相同值。

循环结束时的状态:

当 while (left <= right) 跳出循环时,right < left,此时 left 是第一个大于等于 target 的位置。
如果 target 存在于数组中,那么 left 正好指向它第一次出现的位置。

(2) 查找目标值 target 最后一次出现的位置的实现思路?

目标:

我们要找到 最后一个等于 target 的位置。换句话说,我们要找到最大的下标 i,使得 nums[i] == target。

核心思想:

我们仍然使用二分查找,但这次不是找第一个大于等于 target 的位置,而是:

    如果 nums[mid] <= target,说明可能还有更大的、也等于 target 的位置在右边 → 向右缩
    如果 nums[mid] > target,说明当前点和右边都太大了 → 向左缩

思路拆解:

    我们始终维护一个区间 [left, right],表示目标值可能在这个区间内。
    当 nums[mid] <= target 时,我们尝试往右找是否有更靠后的相同值。
    即使 nums[mid] == target,我们也继续向右搜索,看有没有更多相同的值。

这样,随着循环不断进行,left 最终会停在 最后一个 target 的下一个位置,所以最终的位置是 right。

循环结束时的状态:

当 while (left <= right) 跳出循环时,left > right,此时:

    right 是最后一个 ≤ target 的位置。
    如果 nums[right] == target,那它就是最后一次出现的位置。

三. 总结:

问题

回答

为什么跳出循环后 left 是第一个 target 出现的位置?

因为我们使用的是 “左缩” 策略,最终 left 停在第一个 ≥ target 的位置,如果存在 target,那这个位置就是它的首次出现。

为什么跳出循环后 right 是最后一个 target 出现的位置?

因为我们使用的是 “右缩” 策略,最终 right 停在最后一个 ≤ target 的位置,如果存在 target,那这个位置就是它的最后一次出现。

时间复杂度是多少?

O(log n)


文章转载自:

http://NwuXPdlG.mnygn.cn
http://uceKfgXx.mnygn.cn
http://tgHf12Qk.mnygn.cn
http://c87hmFVr.mnygn.cn
http://wa81OgU1.mnygn.cn
http://emsRVapo.mnygn.cn
http://BaHAiKA6.mnygn.cn
http://k4OArjQV.mnygn.cn
http://6imEVV3U.mnygn.cn
http://OLUkT7Yb.mnygn.cn
http://usw3EIkP.mnygn.cn
http://HMjNFvT9.mnygn.cn
http://PYfWKTYG.mnygn.cn
http://fcGRnSJ8.mnygn.cn
http://D9ohf3nx.mnygn.cn
http://ouDniiv6.mnygn.cn
http://5NWkz8ol.mnygn.cn
http://XEPd8gxe.mnygn.cn
http://lDE8hzzq.mnygn.cn
http://tcAfOYlY.mnygn.cn
http://EHjmEy8h.mnygn.cn
http://bLOdPsGM.mnygn.cn
http://vOL8BnB5.mnygn.cn
http://dspebMUW.mnygn.cn
http://k7wdWalx.mnygn.cn
http://AoMuCe8j.mnygn.cn
http://ZuECSMhD.mnygn.cn
http://KxXlGSdF.mnygn.cn
http://pxWsWJFx.mnygn.cn
http://4VepQCFG.mnygn.cn
http://www.dtcms.com/wzjs/672706.html

相关文章:

  • 建设网站的公司汇总自己怎么开电商平台
  • 公司有些网站打不开鲜花网站建设源代码
  • 建筑工程网站建设方案网站三要素怎么做
  • 承德建设局网站域名服务器搭建
  • 哪些网站做企业招聘不要花钱电商平台开发需要哪些技术人员
  • 网上书店网站建设的说明书广州黄埔做网站公司
  • 莒县网站建设公司aspnet网站开发技术
  • 网站开发哪些专业网站怎么添加外链
  • 0基础网站搭建教程中企动力公司是做什么的
  • 网站内容编辑怎么做舆情报告总结
  • .net电商网站全站开发网站制作 南京
  • 网站 改版方案怎么添加wordpress模板文件夹
  • 免费网站加速软件如何做网站的自由撰稿人
  • 百度收录了我新网站的2篇文章了网站建设合同黑客攻击
  • 网站建设推销员话术河南网站优化外包服务
  • perl网站建设网站广告是内容营销吗
  • 做家教网站资质海淀中小企业网站开发
  • cms 官方网站WordPress商品相册幻灯片
  • 自己也可以免费轻松创建一个网站做网站多少分辨率好
  • 福州电商网站建设手机网站建设讯息
  • 深圳品牌网站设计电话wordpress实现注册功能
  • 网上做试卷的网站中国建设工程安全管理协会网站
  • 建设购物网站论文百度怎样建设网站
  • 网站建设开发软件有哪些方面广告拍摄公司
  • 搜索引擎 网站推广手机搭建wordpress 不root
  • 免费建设展示网站从事高端网站建设
  • 全国工程建设行业优秀网站自己做文字壁纸的网站
  • 十大设计创意网站图书馆网站建设的要求
  • 要如何自己创建一个网站安阳区号座机22开头哪的电话
  • 网站 备份 还原做酒店管理网站的作用