leetcode:Search for a Range 【Java】
2016-03-03 14:04
483 查看
一、问题描述
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
二、问题分析
利用二分查找算法查找target下标,再结合计数器查找区间(注意:假设i > j,则i和j之间的元素个数count = i - j + 1)。
三、算法代码
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].
二、问题分析
利用二分查找算法查找target下标,再结合计数器查找区间(注意:假设i > j,则i和j之间的元素个数count = i - j + 1)。
三、算法代码
public class Solution { public int[] searchRange(int[] nums, int target) { int [] result = new int[]{-1, -1}; int start = 0; int end = nums.length - 1; int middle = 0; while(start <= end){ middle = (start + end)/2; if(nums[middle] == target){ //找到target,开始查找区域 int count = 0; for(int i = middle; i >= 0; i--){ if(nums[i] == target){ count++; }else{ break; } } result[0] = middle - count + 1; count = 0;//重新初始化计数器 for(int j = middle; j <= nums.length - 1; j++){ if(nums[j] == target){ count++; }else{ break; } } result[1] = middle + count - 1; return result; } if(nums[middle] > target){ end = middle - 1; }else{ start = middle + 1; } }//end while return result; } }
相关文章推荐
- Spring中加载配置xml文件的方法
- Java学习记录-入门篇
- Java垃圾回收机制
- eclipse IDE引入dtd和xsd文档约束
- Java设计模式——原型模式
- Java设计模式——原型模式
- 如何获得最新的jdk和最新的eclipse
- Spring Bean装配:Bean注解实现以及定义
- java中如何将字符数组转换成字符串,以逗号分割
- activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建
- java中字符串怎样截取成一个一个的小段
- [疯狂Java笔记]AWT:常用组件
- Log4j使用总结
- java23种设计模式
- android:省市县三级联动(基于json和spring)
- SpringMvc学习心得(一)浅谈spring
- leetcode:Search Insert Position 【Java 】
- spring mvc的DefaultServlet的作用
- Java基础日记
- 安卓开发入门之eclipse配置java和adb环境