leetcode:Search for a Range 二分查找
2014-09-21 11:40
441 查看
Search for a Range
Given a sorted array of integers, 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].题目描述的意思是,从一个有序数组里找到给定目标数的起始下标和结束下标,如果没找到就返回[-1,-1],时间复杂度要为O(logn)。因为有时间复杂度的限制,直接遍历肯定是不行的,遍历的复杂度为O(n);很容易想到,可以使用二分查找稍微变化一下,找到目标数后就把数组分成两半继续查找,每次找到后替换开始下标或结束下标就行。
/** * Created by shily on 2014/9/21. */ public class SearchforaRange { public static void main(String[] args){ int[] a = {8,8,8,8,8,8,8}; int[] b = searchRange(a,8); System.out.print(b[0]+" "+b[1]); } public static int[] searchRange(int[] A, int target) { int index = binarySearch(A,0,A.length-1,target); int[] targetIndexs = {-1,-1}; if(index!=-1){ int left = index; int right = index; targetIndexs[0] = left; targetIndexs[1] = right; while ((left = binarySearch(A,0,left-1,target))!=-1) targetIndexs[0] = left; while ((right = binarySearch(A,right+1,A.length-1,target))!=-1) targetIndexs[1] = right; } return targetIndexs; } private static int binarySearch(int[] A,int low,int high,int target){ while(low<=high){ int mid = low + (high-low)/2; if (A[mid]>target) high = mid - 1; else if (A[mid]<target) low = mid + 1; else return mid; } return -1; } }
相关文章推荐
- leetcode_34——Search for a Range(二分查找)
- leetCode_Search for a Range(二分查找)
- leetcode-二分查找:Search for a range
- LeetCode Search for a Range (二分查找)
- leetcode 34. Search for a Range 二分查找
- LeetCode:Search Insert Position,Search for a Range (二分查找,lower_bound,upper_bound)
- LeetCode-Search for a Range-搜索范围-二分查找
- leetcode 二分查找 Search for a Range
- leetcode 34. Search for a Range (二分查找)
- leetcode:Search for a Range(数组,二分查找)
- [leetcode-二分查找]--34. Search for a Range
- LeetCode 34 Search for a Range (有序数组中查找给定数字的起止下标)
- Leetcode刷题记——34. Search for a Range(查找一个范围)
- 34. Search for a Range(二分查找有重复元素数组中的目标数的第一个位置和最后一个位置)
- Search for a Range 寻找一个区间 二分查找左边展开
- Leetcode 34 Search for a Range (二分搜索 lower_bound和upper_bound)
- 二分查找:Search for a Range
- 34.leetcode Search for a Range(meidum)[二分查找]
- 【二分查找】Search for a Range
- LeetCode-----34. Search for a Range(查找范围)