| 12345678910111213141516171819202122232425262728293031323334353637383940 | 
							- func findClosestElements(arr []int, k int, x int) (res []int) {
 
- 	n := len(arr)
 
- 	beg, end := 0, n-1
 
- 	for beg <= end {
 
- 		mid := beg + (end-beg)/2
 
- 		if arr[mid] < x {
 
- 			beg = mid + 1
 
- 		} else {
 
- 			end = mid - 1
 
- 		}
 
- 	}
 
- 	if beg == n {
 
- 		return arr[n-k:]
 
- 	} else if arr[beg] == x {
 
- 		res = append(res, x)
 
- 		beg, end = beg-1, beg+1
 
- 		k--
 
- 	} else {
 
- 		beg, end = beg-1, beg
 
- 	}
 
- 	for ; 0 < k; k-- {
 
- 		if beg < 0 {
 
- 			res = append(res, arr[end])
 
- 			end++
 
- 		} else if n <= end {
 
- 			res = append(res, arr[beg])
 
- 			beg--
 
- 		} else {
 
- 			if x-arr[beg] <= arr[end]-x {
 
- 				res = append(res, arr[beg])
 
- 				beg--
 
- 			} else {
 
- 				res = append(res, arr[end])
 
- 				end++
 
- 			}
 
- 		}
 
- 	}
 
- 	sort.Ints(res)
 
- 	return res
 
- }
 
 
  |