Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Solution {
- /**
- * @param A an integer array
- * @param target an integer
- * @param k a non-negative integer
- * @return an integer array
- */
- public int[] kClosestNumbers(int[] A, int target, int k) {
- int[] result = new int[k];
- if (A == null || A.length == 0) {
- return A;
- }
- if (k > A.length) {
- return A;
- }
- int index = firstIndex(A, target);
- int start = index - 1;
- int end = index;
- for (int i = 0; i < k; i++) {
- if (start < 0) {
- result[i] = A[end++];
- } else if (end >= A.length) {
- result[i] = A[start--];
- } else {
- if (target - A[start] <= A[end] - target) {
- result[i] = A[start--];
- } else {
- result[i] = A[end++];
- }
- }
- }
- return result;
- }
- private int firstIndex(int[] A, int target) {
- int start = 0, end = A.length - 1;
- while (start + 1 < end) {
- int mid = start + (end - start) / 2;
- if (A[mid] < target) {
- start = mid;
- } else if (A[mid] > target) {
- end = mid;
- } else {
- end = mid;
- }
- }
- if (A[start] >= target) {
- return start;
- }
- if (A[end] >= target) {
- return end;
- }
- return A.length;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment