Leetcode 34. Search for a Range
2016-01-15 08:48
495 查看
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
找first position:
相同的时候砍掉右边
找last position:
相同的时候砍掉左边
题目可以变化问题:问8(target number)出现了几次?
答案:right bound - left bound + 1
Java code:
Reference:
1. http://www.jiuzhang.com/solutions/search-for-a-range/
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].
解题思路:
题意转换, 变成找first bound of target and right bound of target.找first position:
相同的时候砍掉右边
找last position:
相同的时候砍掉左边
题目可以变化问题:问8(target number)出现了几次?
答案:right bound - left bound + 1
Java code:
public class Solution { public int[] searchRange(int[] nums, int target) { if(nums.length == 0 ){ return new int[]{-1, -1}; } int start, end, mid; int[] bound = new int[2]; //search for left bound start = 0; end = nums.length-1; while (start + 1 < end) { mid = start + (end - start) / 2; if (nums[mid] == target) { end = mid; } else if (nums[mid] < target) { start = mid; } else { end = mid; } } if(nums[start] == target){ bound[0] = start; } else if (nums[end] == target) { bound[0] = end; } else { bound[0] = bound[1] = -1; return bound; } //search for right bound start = 0; end = nums.length-1; while (start + 1 < end) { mid = start + (end - start) / 2; if (nums[mid] == target) { start = mid; } else if (nums[mid] < target) { start = mid; } else { end = mid; } } if(nums[end] == target) { bound[1] = end; }else if (nums[start] == target){ bound[1] = start; }else { bound[0] = bound[1] = -1; return bound; } return bound; } }
Reference:
1. http://www.jiuzhang.com/solutions/search-for-a-range/
相关文章推荐
- C语言去除字符串首尾空格,trim()函数实现
- 通信基础
- Android--动态改变ImageView的亮度
- 谁在为互联网从业者的薪水买单? 1技术创业者2传统企业外行着3互联网公司的新项目
- oracle 安全与审计
- 全面学习ORACLE Scheduler特性(12)使用Windows和Window Groups
- 全面学习ORACLE Scheduler特性(11)使用Job Classes
- 全面学习ORACLE Scheduler特性(10)管理Chains
- 全面学习ORACLE Scheduler特性(9)创建Chains
- sqlite3以及sql的简单介绍
- 每天一个设计模式: 状态模式(State)
- 使用myeclipse为java web项目添加Spring框架
- ubuntu14.04下mysql数据库的默认存放路径并修改
- ThinkPHP、php项目csv格式导入,需要的可以略作调整
- 全面学习ORACLE Scheduler特性(8)Application抛出的Events
- 地形编辑
- 全面学习ORACLE Scheduler特性(7)Scheduler抛出的Events
- 全面学习ORACLE Scheduler特性(6)设置Repeat Interval参数
- 术语解释
- 第四讲 混合三种背包问题 HDU 3535 AreYouBusy