Search for a Range
来源:互联网 发布:gif软件 电脑 编辑:程序博客网 时间:2024/06/03 20:21
原题:
Given an array of integers sorted in ascending order, find the starting and ending position of a given target value.
Your algorithm's runtime complexity must be in the order of O(log n).
If the target is not found in the array, return [-1, -1]
.
For example,
Given [5, 7, 7, 8, 8, 10]
and target value 8,
return [3, 4]
.
即从给定数组中找到值为target的元素,返回这些元素下标的最小值和最大值。
思考过程&解题思路:
排好序的数组找元素用二叉搜索会使复杂度为o(logn)。一开始想到二叉搜索找到target之后从它两边开始遍历,判断是否值仍为target,最后返回结果。如果给定数组是{8,8,8,8,8,8,88,8,8,...,8},taget是8,复杂度岂不是o(n),提交了一下发现过了。估计也不会有这样无聊的数据。
结果代码:
public int[] searchRange(int[] nums, int target) { if (nums.length == 0) return new int[]{-1,-1}; return binarySearch(nums,0,nums.length - 1,target); } public int[] binarySearch(int nums[],int begin,int end,int target){ int midium = (begin + end) / 2; if (midium == begin) { if (nums[midium] == target) return findRange(nums,midium,target); if (nums[end] == target) return findRange(nums,end,target); else return new int[]{-1,-1}; } if (target > nums[midium]) return binarySearch(nums,midium,end,target); else return binarySearch(nums,begin,midium,target); } public int[] findRange(int[] nums,int center,int target){ int begin = center,end = center; while (begin > 0 && nums[begin - 1] == target) begin--; while (end < nums.length - 1 && nums[end + 1] == target) end ++; return new int[]{begin,end}; }
阅读全文
0 0
- Search for a Range
- Search for a Range
- Search for a Range
- Search for a Range !!!
- Search for a Range
- Search for a Range
- Search For A Range
- Search for a Range
- Search for a Range
- Search for a Range
- Search for a Range
- Search for a Range
- Search for a Range
- Search for a Range
- Search for a Range
- Search for a Range
- Search for a Range
- Search for a Range
- Understanding LSTM Networks
- (二)synchronized和重入锁
- apollo-server-koa 简单使用
- 机器学习 学习笔记
- 欢迎使用CSDN-markdown编辑器
- Search for a Range
- loadrunner Lr_类函数之lr_db_dataset_action()
- storm与hadoop对比
- loadrunner Lr_类函数之lr_db_disconnect()
- 无穷小微积分落地生根在中国的现实意义
- 设置两个路由器无线桥接
- php的异常
- MSCRM plugin debug方法
- 自定义Unity调色板