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

如何做网络集资网站全免费建立自己的网站

如何做网络集资网站,全免费建立自己的网站,网站开发小程序,企业咨询服务合同数的范围 给定一个按照升序排列的长度为 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/a/576029.html

相关文章:

  • 深圳网站建设联华春晗环境建设有限公司网站
  • 常州网站快速排名优化上海室内设计事务所
  • python做后台网站的多吗intitle:律师网站建设的重要性
  • 网站301定向nginx wordpress 403
  • 网站推广联盟戴尔网站建设目标
  • 云原神官方网站正版下载百度账号24小时人工电话
  • 出色的网站设计wordpress聊天系统
  • 网站服务器收费网站建设实训体会
  • 沭阳网站建设方案面试问你如何快速优化网站
  • wordpress php5.3版本泉州seo按天付费
  • 网站管理员后台WordPress留言板插件使用
  • 网站排名软件网址注册一个软件需要多少钱
  • 网站排名站长之家那些网站可以做文案兼职
  • seo网站推广平台农产品电商营销策划方案
  • 网站开发需求文档模板网站建设最难的是什么
  • 唐山快速建站的公司知更鸟wordpress主题
  • 已认证网站服务费怎么做如何做网站源码备份
  • 网站视频弹窗代码对招聘网站页面设计做建议
  • 一般网站用什么做的开发网站设计
  • 做青蛙网站爱站小工具
  • 江西医疗网站备案前置审批贵州二级站seo整站优化排名
  • 网站排名 各因素成都网站建设公司电话
  • 低价网站空间h5做商城网站
  • 哪个网站做分享赚佣金wordpress模板 手机版
  • 三亚住房和城乡建设厅网站汕头站
  • 电子商务网站建设侧重哪几个方面山东潍坊网站制作公司
  • wordpress网站速度时快时慢网站建设太仓
  • 够物网站空间100m够不够怎么做企业网站
  • 珠海网站建设陈玉铭百度seo关键词排名优化
  • 免费制作主图的网站阳江建设网站