LeetCode-34.Search for a Range
来源:互联网 发布:java初学者书籍推荐 编辑:程序博客网 时间:2024/06/13 15:37
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]
.
三次二分查找,先找到一个目标元素,然后再向左和向右查找
public int[] SearchRange(int[] nums, int target) { int n = nums.Length; int[] res = new int[2] { -1, -1 }; if (nums[0] > target || nums[n - 1] < target) return res; int start = 0, end = n - 1, mid=0; while (start<=end) { mid = (start + end) / 2; if (nums[mid] == target) { res[0] = res[1] = mid; break; } if (nums[mid] < target) start = mid + 1; else end = mid - 1; } if (res[0] == -1) return res; start = 0; end = res[0]; while (start <= end) { mid = (start + end) / 2; if (nums[mid] == target) end = mid - 1; else start = mid + 1; } res[0] = start; start = res[1]; end = n-1; while (start <= end) { mid = (start + end) / 2; if (nums[mid] == target) start = mid + 1; else end = mid - 1; } res[1] = end; return res; }
方法2 只用两次二分
对于效率是否更高?似乎还是要考虑输入。因为如果不存在目标数,则方法1只需一次二分,存在时需要三次,方法2都是需要两次二分
public int[] SearchRange(int[] nums, int target) { int n = nums.Length; int[] res = new int[2] { -1, -1 }; if (nums[0] > target || nums[n - 1] < target) return res; int start1 = 0, end1 = n - 1, mid=0; while (start1 <= end1) { mid = (start1 + end1) / 2; if (nums[mid] >= target) end1 = mid - 1; else start1 = mid + 1; } int start2 = 0, end2 = n - 1; while (start2 <= end2) { mid = (start2 + end2) / 2; if (nums[mid] <= target) start2 = mid + 1; else end2 = mid - 1; } if (start1 <= end2) { res[0] = start1; res[1] = end2; } return res; }
方法2 参考 http://blog.csdn.net/linhuanmars/article/details/20593391
0 0
- [LeetCode]34.Search for a Range
- LeetCode --- 34. Search for a Range
- LeetCode 34.Search for a Range
- [Leetcode] 34. Search for a Range
- [leetcode] 34.Search for a Range
- 【leetcode】34. Search for a Range
- [leetcode] 34. Search for a Range
- Leetcode 34. Search for a Range
- LeetCode 34. Search for a Range
- <LeetCode OJ> 34. Search for a Range
- 34. Search for a Range LeetCode
- [Leetcode]34.Search for a Range
- leetcode 34. Search for a Range
- leetcode 34. Search for a Range
- leetcode 34. Search for a Range
- leetcode 34. Search for a Range
- LeetCode *** 34. Search for a Range
- LeetCode 34. Search for a Range
- 简要理解java里的多线程
- UnsupportedOperationException
- 使用jquery内容过滤选择器
- 网卡驱动设计---架构分析加回环网卡驱动设计(网卡驱动上)
- TextView(怎么用代码动态设置字体颜色)
- LeetCode-34.Search for a Range
- vertica-优化编码
- 浅谈SPI总线
- 使用jquery可见性过滤选择器
- HTML5调用手机摄像头拍照
- python-super函数
- jquery属性过滤选择器
- 1002. 写出这个数 (20)
- [INS-40406] 未检测到现有的 Oracle Grid Infrastructure 软件