[LeetCode][Java] Search for a Range
2015-07-12 12:06
585 查看
题目:
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).
如果数组中没有该目标值,就返回
[-1, -1].
例如:
给定[5,
7, 7, 8, 8, 10]和目标值8,
返回[3,4].
算法分析:
二分搜索找目标元素,找到后,在数组中前后遍历,找该元素的起始位置和结束位置AC代码:
public class Solution { public int[] searchRange(int[] nums, int target) { int label=0; int res[]=new int[2]; if(nums==null||nums.length==0) { res[0]=-1; res[1]=-1; return res; } label=searchforlabel(nums,target,0,nums.length-1); if(label==-1)//若没有找到目标元素 { res[0]=-1; res[1]=-1; } else { for(int i=label;i>=0;i--) { if(nums[i]!=nums[label])//找到左边第一个不同于目标元素的值,记录位置 { res[0]=i+1; break; } else res[0]=i; } for(int i=label;i<nums.length;i++) { if(nums[i]!=nums[label])//找到右边第一个不同于目标元素的值,记录位置 { res[1]=i-1; break; } else res[1]=i; } } return res; } //二分查找 private static int searchforlabel(int[] nums, int target,int startindex,int endindex) { int midindex=0; midindex=(startindex+endindex)/2; if(nums==null||nums.length==0||startindex>endindex) return -1; if(nums[midindex]==target) return midindex; else if(nums[midindex]>target) return searchforlabel(nums,target,startindex,midindex-1); else return searchforlabel(nums,target,midindex+1,endindex); } }
相关文章推荐
- java多线程基础知识总结
- 学习笔记_Java get和post区别(转载_GET一般用于获取/查询资源信息,而POST一般用于更新资源信息)
- 对第14章类型信息中RegisteredFactories.java的理解
- 修复maven文件目录结构
- Java设计模式の单利模式
- eclipse使用技巧总结
- Java学习笔记04 俄罗斯方块的界面切换
- java实现串口配置之运行环境搭建
- [LeetCode][Java] Search in Rotated Sorted Array
- Java Thread.join()详解--父线程等待子线程结束后再结束
- 关于struts2与spring整合中,scope=“?”的使用,对整个系统的影响
- JAVA集合类详解
- Struts2拦截器实现异常处理机制
- java socket & java NIO 通信机制
- 关于String的一些问题
- ubuntu eclipse adt 真机调试
- HashMap与HashTable的区别
- spring MVC 文件执行顺序
- Struts2动态方法调用
- Eclipse出现Caused by: java.lang.NoClassDefFoundError: android.support.v7.recyclerview.R$styleable