原题链接在这里:https://leetcode.com/problems/find-k-closest-elements/description/
题目:
Given a sorted array, two integers k
and x
, find the k
closest elements to x
in the array. The result should also be sorted in ascending order. If there is a tie, the smaller elements are always preferred.
Example 1:
Input: [1,2,3,4,5], k=4, x=3 Output: [1,2,3,4]
Example 2:
Input: [1,2,3,4,5], k=4, x=-1 Output: [1,2,3,4]
Note:
- The value k is positive and will always be smaller than the length of the sorted array.
- Length of the given array is positive and will not exceed 104
- Absolute value of elements in the array and x will not exceed 104
题解:
直接查找这k个最近值开始的位置po. 也就是arr[po] 比 arr[po+k]更接近目标值x.
Time Complexity: O(logn + k).
Space: O(1). regardless res.
AC Java:
1 class Solution { 2 public List<Integer> findClosestElements(int[] arr, int k, int x) { 3 List<Integer> res = new ArrayList<Integer>(); 4 if(arr == null || arr.length == 0 || k == 0){ 5 return res; 6 } 7 8 int l = 0; 9 int r = arr.length-k; 10 while(l<r){ 11 int mid = l+(r-l)/2; 12 if(x - arr[mid] > arr[mid+k]-x){ 13 l = mid+1; 14 }else{ 15 r = mid; 16 } 17 } 18 19 for(int i = l; i<l+k; i++){ 20 res.add(arr[i]); 21 } 22 return res; 23 } 24 }
时间: 2024-10-04 18:04:15