LeetCode 34 Search for a Range
2016-06-08 00:00
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
For example,
Given
return
解题思路:有了上一题的启发,这一题的解决办法是利用二分法处理,利用无递归的二分法算法实现题目要求的O(log n)的要求,然后利用前后遍历实现找到范围所在。但也要考虑到,当重复项过多,该算法会退化到O(n)的复杂度。
代码如下:
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].
解题思路:有了上一题的启发,这一题的解决办法是利用二分法处理,利用无递归的二分法算法实现题目要求的O(log n)的要求,然后利用前后遍历实现找到范围所在。但也要考虑到,当重复项过多,该算法会退化到O(n)的复杂度。
代码如下:
public int[] searchRange(int[] nums, int target) { int len = nums.length; int l =0; int r = len - 1; int mid =(l+r)/2; int i=0,j=0; int []re = {-1,-1}; while(l<=r){ if(target<nums[l]||target>nums[r]) return re; if(nums[mid]==target){ i = mid; j = mid; if(mid>0){ int t = i; while(nums[--t]==target){ i=t; if(i>0){ continue; }else{ break; } } } if(mid<len-1){ int g =j; while(nums[++g]==target){ j =g; if(j<len-1){ continue; }else{ break; } } } int []re1 = {i,j}; return re1; }else if(nums[mid]<target){ l = mid+1; }else{ r =mid-1; } mid =(l+r)/2; } return re; }
相关文章推荐
- #1094 : Lost in the City 找到几个当年c语言留下的坑
- LeetCode 6 ZigZag Conversion
- Java并发测试扩展插件JunitPerf的使用
- IOS开发中WebView加载资源路径问题
- AngularJS之指令中controller与link(十二)
- LeetCode 23 Merge k Sorted Lists 高空间消耗解法与堆的解法,还需要学习堆的做法
- LeetCode 28 StrStr 解法为KMP&&Rolling hash
- LeetCode 35 Search Insert Position 二分法处理
- 学知识的时候,把自己放得低一点
- LeetCode Gas Station
- 函数指针的正确理解 from C++ Primer Plus P242
- Linux下CPU获取指定时间的用户态、系统态以及空闲态的时间
- LeetCode 39 && 40 Combination Sum I && II 关键在于剪枝,剪枝讨论在末尾
- php调用R的脚本实现方案
- Leetcode 55 Jump Game && 45 Jump Game II
- LeetCode 26 Remove Duplicates from Sorted Array
- LeetCode Repeated DNA Sequences的一点疑惑
- Max Sum Plus Plus----DP
- How does memmove differ from memcpy
- LeetCode 8 String to Integer (atoi)