Problem:
Given a sorted array of integers, find the starting and ending position of a Given target value.
Your algorithm ' s runtime complexity must is in the order of O(log n).
if The target is not a found in the array, Return [-1,-1]
.
For example,
Given [5, 7, 7, 8, 8, 10]
and target value 8,
Return [3, 4]
.
Solution: Use binary lookup, then find the beginning and end, return
Given an array and a target integer, it is required to derive the starting and ending positions of the target integers in the array, if no output-1-1
Java source Code (407MS):
public class Solution {public int[] Searchrange (int[] nums, int target) { int[] res = new INT[2]; int l=0,len=nums.length,r=len-1,mid=0; while (l<=r) { mid= (l+r) >>1; if (nums[mid]==target) break; else if (nums[mid]>target) r=mid-1; else l=mid+1; } if (l<=r) { l=mid-1; while (l>=0 && Nums[l]==nums[mid]) l--; r=mid+1; while (R<len && Nums[r]==nums[mid]) r++; res[0]=l+1; res[1]=r-1; } else{ res[0]=-1; res[1]=-1; } return res; }}
C Language Source code (8MS):
int* Searchrange (int* nums, int numssize, int target, int* returnsize) { int* res= (int*) malloc (sizeof (int) * *); int l=0,r=numssize-1,mid; while (l<=r) { mid= (l+r) >>1; if (nums[mid]==target) break; else if (nums[mid]>target) r=mid-1; else l=mid+1; } if (l<=r) { l=mid-1; while (l>=0 && Nums[l]==nums[mid]) l--; r=mid+1; while (R<numssize && Nums[r]==nums[mid]) r++; res[0]=l+1;res[1]=r-1; *returnsize=2; return res; } else{ res[0]=-1;res[1]=-1; *returnsize=2; return res; }}
C + + source code (14MS):
Class Solution {public: vector<int> searchrange (vector<int>& nums, int target) { vector< int> Res; int l=0,len=nums.size (), R=len-1,mid; while (l<=r) { mid= (l+r) >>1; if (nums[mid]==target) break; else if (nums[mid]>target) r=mid-1; else l=mid+1; } if (l<=r) { l=mid-1; while (l>=0 && Nums[l]==nums[mid]) l--; r=mid+1; while (R<len && Nums[r]==nums[mid]) r++; Res.push_back (l+1); Res.push_back (r-1); } else{ Res.push_back ( -1); Res.push_back ( -1); } return res; }};
Python source code (58MS):
Class solution: # @param {integer[]} nums # @param {integer} target # @return {integer[]} def Searchrange (self, Nums, target): Length=len (nums); L=0;r=length-1;mid=0 res=[-1,-1] while l<=r: mid= (l+r) >>1; If Nums[mid]==target:break elif nums[mid]>target:r=mid-1 else:l=mid+1 if l<=r: l=mid-1 While l>=0 and Nums[l]==nums[mid]:l-=1 r=mid+1 while R<length and nums[r]==nums[mid]:r+=1 Res[0]=l+1;res[1]=r-1 Return res
Leetcode Search for a Range (C,c++,java,python)