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

湖南省政务服务网 网站建设要求今日百度关键词排名

湖南省政务服务网 网站建设要求,今日百度关键词排名,做酸菜视频网站,wordpress post 类型1.题目 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 1.1 示例 …

1.题目

给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。

如果数组中不存在目标值 target,返回 [-1, -1]

你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。

1.1 示例

输入:nums = [5,7,7,8,8,10], target = 8
输出:[3,4]
输入:nums = [5,7,7,8,8,10], target = 6
输出:[-1,-1]
输入:nums = [], target = 0
输出:[-1,-1]

1.2 提示

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

     

2. 暴力思路

首先想到暴力,遍历整个数组然后把符合要求的存入一个 List 中,然后把集合中第一个和最后一个元素封装成数组返回。想想当题目元素只有一个时,new int[]{list.get(0), list.get(list.size() - 1)} 也能满足需求。 但这样时间复杂度为O(n) 了,但提交也能过。


2.1 代码

   public int[] searchRange(int[] nums, int target) {List<Integer> list = new ArrayList<>();for (int i = 0; i < nums.length; i++) {if (nums[i] == target) {list.add(i);}}return convert(list);}private int[] convert(List<Integer> list) {if (list == null || list.isEmpty()) {return new int[]{-1, -1};}return new int[]{list.get(0), list.get(list.size() - 1)};}

3 二分优化


3.1 思路

题目说数组是递增的,用 left 和 right 两个指针来划定搜索范围,mid 是中间元素的索引。如果中间元素等于目标值,那可能这个元素就是第一个出现的位置,但也可能存在更早的相同元素,所以需要把 right 调整到 mid - 1,继续往左找。如果中间元素小于目标值,说明要找的元素在右边,left 调整到 mid + 1;否则,就在左边找。这个过程不断缩小范围,直到找到最左边的目标元素。
同理找最后的方法是一致的。

代码是通过两次二分查找分别找到目标元素的最左和最右出现的位置。这种方式的时间复杂度是 O(log n),比线性扫描的 O(n) 要高效得多。


3.2 代码
 

    public int[] searchRange(int[] nums, int target) {int first = findFirst(nums, target);int last = findLast(nums, target);return new int[]{first, last};}private int findFirst(int[] nums, int target) {int left = 0, right = nums.length - 1;int first = -1;while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] == target) {first = mid;right = mid - 1;} else if (nums[mid] < target) {left = mid + 1;} else {right = mid - 1;}}return first;}private int findLast(int[] nums, int target) {int left = 0, right = nums.length - 1;int last =   - 1;while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] == target) {last = mid;left = mid + 1;} else if (nums[mid] < target) {left = mid + 1;} else {right = mid - 1;}}return last;}

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

相关文章:

  • 仓库管理系统需求分析seo网站是什么意思
  • 字体设计网站有哪些热搜榜百度
  • 网站标题会影响吗长沙seo优化公司
  • 网站建设详细报价百度做广告多少钱一天
  • 博客类网站怎么做百度热搜榜排名今日头条
  • 可以在哪些网站做翻译兼职seo站长博客
  • 网站字体 font-family进入百度搜索网站
  • 如何找网站推广windows7优化大师下载
  • 建立一个网站需要什么技术培训机构哪家最好
  • 海淀区网站建设公司全媒体广告投放平台
  • 网页制作模板田田田田田田田田田田田田田田选择宁波seo优化公司
  • 做淘宝客网站教程域名注册服务商
  • 烟台城乡建设局官方信息网站武汉久都seo
  • esc怎么做网站网络营销推广seo
  • 通州的网站建设策划推广活动方案
  • 网站上传面板网络营销常用的方法有哪些
  • 合肥网站建设方案全国培训机构排名前十
  • 专业建设网站服务品牌服务推广
  • 花蝴蝶 高清直播win10必做的优化
  • 苏州工业园区做政务网站的公司北京seo招聘信息
  • 网页在线制作网站搜索引擎竞价广告
  • 怎么做打码网站百度关键词网站排名优化软件
  • 大型公司网络搭建实例黄山seo公司
  • 宝安石岩网站建设腾讯企点是干嘛的
  • 长沙专业网站建设公司哪家好市场营销的策划方案
  • 望野拼音南宁百度seo公司
  • 网站开发需要掌握技术山西网站seo
  • 南京做网站联系南京乐识合肥seo排名扣费
  • 山东德州做网站网站建设公司网站
  • 衡水做wap网站价格黄石seo诊断