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

电脑网站与手机的区别是什么网站搜索引擎推广

电脑网站与手机的区别是什么,网站搜索引擎推广,阿里云 oss做网站,网站建设找伟杨科技数的范围 给定一个按照升序排列的长度为 n 的整数数组,以及 q 个查询。 对于每个查询,返回一个元素 k 的起始位置和终止位置(位置从 0 开始计数)。 如果数组中不存在该元素,则返回 -1 -1。 所用方法和基本原理 该…

数的范围

给定一个按照升序排列的长度为 n 的整数数组,以及 q 个查询。

对于每个查询,返回一个元素 k 的起始位置和终止位置(位置从 0 开始计数)。

如果数组中不存在该元素,则返回 -1 -1

所用方法和基本原理

该代码使用二分查找的方法来解决问题,原理如下:

  1. 查找起始位置
    • 使用二分查找,通过比较中间元素 arr[mid] 与目标元素 k 的大小关系,不断缩小搜索区间。
    • arr[mid] >= k 时,说明目标元素 k 可能在左半部分(包括 mid 位置),所以更新 r = mid;否则,目标元素在右半部分,更新 l = mid + 1
    • 循环结束后,l 指向的位置可能就是 k 的起始位置。此时再判断 arr[l] 是否等于 k,如果不等于,说明数组中不存在 k,返回 -1 -1
  2. 查找终止位置
    • 在确定 k 存在后,再次使用二分查找来确定 k 的终止位置。
    • 这次二分查找的逻辑与查找起始位置略有不同,当 arr[mid] <= k 时,说明目标元素 k 可能在右半部分(包括 mid 位置),所以更新 l = mid;否则,目标元素在左半部分,更新 r = mid - 1
    • 循环结束后,l 指向的位置就是 k 的终止位置。

代码及注释

public class SearchRange {// 查找元素k在数组中的起始和终止位置public static void search(int[] arr, int k) {// 初始化左指针l为数组起始位置int l = 0;// 初始化右指针r为数组末尾位置int r = arr.length - 1;// 使用二分查找确定k的起始位置while (l < r) {// 计算中间位置midint mid = (l + r) >> 1;// 如果中间元素大于等于k,说明k可能在左半部分,更新rif (arr[mid] >= k) {r = mid;} else {// 否则k在右半部分,更新ll = mid + 1;}}// 如果l位置的元素不等于k,说明数组中不存在k,输出-1 -1if (arr[l] != k) {System.out.println("-1 -1");} else {// 保存起始位置llint ll = l;// 重新初始化左指针l为数组起始位置,用于查找终止位置l = 0;// 重新初始化右指针r为数组末尾位置r = arr.length - 1;// 使用二分查找确定k的终止位置while (l < r) {// 这里加1是为了在l = r - 1时,mid会取到r,保证能够检查到所有元素int mid = (l + r + 1) >> 1;// 如果中间元素小于等于k,说明k可能在右半部分,更新lif (arr[mid] <= k) {l = mid;} else {// 否则k在左半部分,更新rr = mid - 1;}}// 保存终止位置rrint rr = l;// 输出k的起始位置和终止位置System.out.println(ll + " " + rr);}}
}

举例说明

假设有数组 arr = [1, 2, 2, 2, 3, 4],要查找元素 k = 2

  1. 查找起始位置
    • 初始 l = 0r = 5mid = (0 + 5) >> 1 = 2arr[2] = 2,因为 2 >= 2,所以 r = 2
    • 此时 l = 0r = 2mid = (0 + 2) >> 1 = 1arr[1] = 2,因为 2 >= 2,所以 r = 1
    • 此时 l = 0r = 1mid = (0 + 1) >> 1 = 0arr[0] = 1,因为 1 < 2,所以 l = 1
    • 此时 l = r = 1,循环结束,arr[1] = 2,所以起始位置 ll = 1
  2. 查找终止位置
    • 重新初始化 l = 0r = 5mid = (0 + 5 + 1) >> 1 = 3arr[3] = 2,因为 2 <= 2,所以 l = 3
    • 此时 l = 3r = 5mid = (3 + 5 + 1) >> 1 = 4arr[4] = 3,因为 3 > 2,所以 r = 3
    • 此时 l = r = 3,循环结束,终止位置 rr = 3
    • 最终输出 1 3,即元素 2 的起始位置是 1,终止位置是 3

方法的优劣

  1. 时间复杂度
    • 对于每次查询,查找起始位置和终止位置都使用了二分查找,每次二分查找的时间复杂度为 (O(\log n))。所以总的时间复杂度为 (O(\log n)),n 为数组的长度。这使得该方法在处理大规模有序数组时效率较高。
  2. 空间复杂度
    • 代码中只使用了几个额外的变量(如 lrmid 等),空间复杂度为 (O(1))。不随输入数组的大小而增加额外的空间需求,空间效率高。

优点:
- 时间复杂度低,适用于处理大规模有序数组的查询。
- 空间复杂度低,对内存的消耗小。
缺点:
- 要求输入数组必须是有序的,如果数组无序,需要先进行排序,这会增加额外的时间复杂度。
- 每次查询只能针对一个元素,如果需要同时查询多个元素,需要多次调用该方法。

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

相关文章:

  • 做网站需要多少屏seo教学培训
  • 小型教育网站的开发建设开题报告收录批量查询工具
  • 国外好的做电视包装的网站亚马逊免费的关键词工具
  • 企业网站制作 南京百度推广的优化软件
  • axcure做网站ui网络营销策划的目的
  • 站长工具 怎么做网站地图百度手机助手下载正版
  • 深圳免费建站百度公司高管排名
  • 免费做ppt网站怎么优化推广自己的网站
  • 成都网站制作电话广告宣传方式有哪些
  • 做网站后台学什么专业外链服务
  • 恩施哪里有做网站的护肤品推广软文
  • 图书类网站开发的背景百度竞价登录入口
  • 网站建设的三网合一百度竞价排名机制
  • 我们不仅仅做网站更懂得网络营销郑州做网站最好的公司
  • 深圳建站服务公司有哪些搜索引擎网站
  • 2022腾讯云网站建设方案书寻找客户的渠道和方法
  • 国内移动端网站做的最好的seo优化网站技术排名百度推广
  • 海外医疗网站建设深圳网站推广公司
  • 百度推广要不要建网站深圳seo优化公司
  • 攸县网站制作公司信息流优化师面试常见问题
  • 用html5制作个人网站网络营销成功的品牌
  • 网站的静态资源服务器怎么做seo排名赚app靠谱吗
  • 为企业做优做强厦门seo外包
  • dw管理动态网站模板下载谷歌海外广告投放推广
  • 搭建一个网站的基本流程个人网站开发网
  • 做网站的没有进项票怎么办网络推广怎么做?
  • 用游戏人物做网站属于侵权吗百度客服电话是多少
  • 为违法网站做推广进去要几年网站搭建公司
  • 简要叙述如何规划建设一个企业网站优化关键词的方法正确的是
  • linux做网站的好处网页设计素材