Advertisement
Guest User

Untitled

a guest
Jul 17th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.40 KB | None | 0 0
  1. class Solution {
  2.     private int[] answer;
  3.     private int[] nums;
  4.     private int target;
  5.     public int[] searchRange(int[] nums, int target) {
  6.         this.answer =new int[] {-1,-1};
  7.         if(nums == null || nums.length == 0) return answer;
  8.         if(nums.length == 1){
  9.             if(nums[0] == target) return new int[] {0,0};
  10.             return answer;
  11.         }
  12.         this.nums = nums;
  13.         this.target = target;
  14.         int lower = findLower(0, nums.length);
  15.         if(lower == -1) return answer;
  16.         findUpper(lower, nums.length);
  17.         return answer;
  18.     }
  19.    
  20.     private int findLower(int start, int end){
  21.         while(start < end){
  22.             int middle = start + (end - start)/2;
  23.             if(nums[middle] > target || nums[middle] == target){
  24.                 end = middle;
  25.             }else{
  26.               start = middle + 1;
  27.             }
  28.         }
  29.        
  30.         if(start == nums.length || nums[start] != target){
  31.             answer[0] = -1;
  32.             return answer[0];
  33.         }
  34.         answer[0] = start;
  35.         return start;
  36.     }
  37.    
  38.     private void findUpper(int start, int end){  
  39.         while(start < end){
  40.             int middle = start + (end - start)/2;
  41.             if(nums[middle] > target){
  42.                 end = middle;
  43.             }else{
  44.               start = middle + 1;
  45.             }
  46.         }
  47.         answer[1] = start -1;
  48.     }
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement