leetcode 658 找到K個最接近的元素

2022-02-09 21:18:52 字數 1097 閱讀 4286

「學而不思則惘」

題面:給定乙個排序好的陣列,兩個整數 k 和 x,從陣列中找到最靠近 x(兩數之差最小)的 k 個數。返回的結果必須要是按公升序排好的。如果有兩個數與 x 的差值一樣,優先選擇數值較小的那個數。

示例 1:

輸入: [1,2,3,4,5], k=4, x=3

輸出: [1,2,3,4]

示例 2:

輸入: [1,2,3,4,5], k=4, x=-1

輸出: [1,2,3,4]

說明:k 的值為正數,且總是小於給定排序陣列的長度。

陣列不為空,且長度不超過 104

陣列裡的每個元素與 x 的絕對值不超過 104

思路:陣列本來是有序的,所以可以使用雙下標逼近法去逼近,如果左邊靠x近(差值絕對值小),那麼右邊左移;否則,左邊右移。空間:o(1)

1

class

solution ;

8 vector res =arr;

9while(res.size() >k)

1016

return

res;17}

18//

時間o(n),空間o(1)

19 vector findclosestelements(vector& arr, int k, int

x) ;

2324

int l = 0, r = len-1;25

while((r - l + 1) >k)

2632

return vector(arr.begin()+l, arr.begin()+l+k);33}

34 };

靈魂拷問:要是無序陣列怎麼辦?

先排序,再如法炮製?

能優化嗎?

leetcode658 找到k個最接近的元素

給定乙個排序好的陣列,兩個整數 k 和 x,從陣列中找到最靠近 x 兩數之差最小 的 k 個數。返回的結果必須要是按公升序排好的。如果有兩個數與 x 的差值一樣,優先選擇數值較小的那個數。示例 1 輸入 1,2,3,4,5 k 4,x 3 輸出 1,2,3,4 示例 2 輸入 1,2,3,4,5 k...

Leetcode658題找到k個最接近的數

題目 給定乙個排序好的陣列,兩個整數 k 和 x,從陣列中找到最靠近 x 兩數之差最小 的 k 個數。返回的結果必須要是按公升序排好的。如果有兩個數與 x 的差值一樣,優先選擇數值較小的那個數。輸入 1,2,3,4,5 k 4,x 3 輸出 1,2,3,4 k 的值為正數,且總是小於給定排序陣列的長...

658找到K個最接近的元素

題目描述 給定乙個排序好的陣列,兩個整數 k 和 x,從陣列中找到最靠近 x 兩數之差最小 的 k 個數。返回的結果必須要是按公升序排好的。如果有兩個數與 x 的差值一樣,優先選擇數值較小的那個數。示例 1 輸入 1 2,3 4,5 k 4,x 3輸出 1 2,3 4 示例 2 輸入 1 2,3 4...