sweet1cris

Untitled

Feb 6th, 2018
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.57 KB | None | 0 0
  1.  
  2. public class Solution {
  3.     /**
  4.      * @param A an integer array
  5.      * @param target an integer
  6.      * @param k a non-negative integer
  7.      * @return an integer array
  8.      */
  9.     public int[] kClosestNumbers(int[] A, int target, int k) {
  10.         int[] result = new int[k];
  11.        
  12.         if (A == null || A.length == 0) {
  13.             return A;
  14.         }
  15.         if (k > A.length) {
  16.             return A;
  17.         }
  18.        
  19.         int index = firstIndex(A, target);
  20.        
  21.         int start = index - 1;
  22.         int end = index;
  23.         for (int i = 0; i < k; i++) {
  24.             if (start < 0) {
  25.                 result[i] = A[end++];
  26.             } else if (end >= A.length) {
  27.                 result[i] = A[start--];
  28.             } else {
  29.                 if (target - A[start] <= A[end] - target) {
  30.                     result[i] = A[start--];
  31.                 } else {
  32.                     result[i] = A[end++];
  33.                 }
  34.             }
  35.         }
  36.         return result;
  37.     }
  38.    
  39.     private int firstIndex(int[] A, int target) {
  40.         int start = 0, end = A.length - 1;
  41.         while (start + 1 < end) {
  42.             int mid = start + (end - start) / 2;
  43.             if (A[mid] < target) {
  44.                 start = mid;
  45.             } else if (A[mid] > target) {
  46.                 end = mid;
  47.             } else {
  48.                 end = mid;
  49.             }
  50.         }
  51.        
  52.         if (A[start] >= target) {
  53.             return start;
  54.         }
  55.         if (A[end] >= target) {
  56.             return end;
  57.         }
  58.         return A.length;
  59.     }
  60. }
Advertisement
Add Comment
Please, Sign In to add comment