Package Level4; import java. util. arrays;/*** Search for a Range ** 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 class S34 {public static void main (String [] args) {int [] A = {5, 8, 8, 8, 8, 8, 8, 8, 10 }; int [] ret = searchRange (A, 10); System. out. println (Arrays. toString (ret);} public static int [] searchRange (int [] A, int target) {int [] ret = {Integer. MAX_VALUE, Integer. MIN_VALUE}; rec (A, target, ret, 0,. length-1); if (ret [0] = Integer. MAX_VALUE) {ret [0] =-1;} if (ret [1] = Integer. MIN_VALUE) {ret [1] =-1;} return ret;} // first use the bipartite method to locate the conditions, then, the two sides are divided into two ways to continue searching for public static void rec (int [] A, int target, int [] ret, int low, int high) {if (low> high) {return;} int mid = low + (high-low)/2; if (target = A [mid]) {ret [0] = Math. min (ret [0], mid); // Save the minimum ret [1] = Math. max (ret [1], mid); // Save the maximum rec (A, target, ret, low, mid-1 ); // continue to find the lower limit rec (A, target, ret, mid + 1, high) that meets the conditions ); // continue to find the upper limit} else if (target <A [mid]) {rec (A, target, ret, low, mid-1 );} else {rec (A, target, ret, mid + 1, high );}}}