找到 K 個最接近的元素

2021-10-25 22:20:22 字數 1017 閱讀 1960

題目:

給定乙個排序好的陣列,兩個整數 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]

解題思路: 有兩種思路, 一種是運用雙指標法, 通過比較左右兩指標元素與x的差來縮小區間, 直到區間為k就是我們要找的區間, 還有一種思路是運用二分法來解決該問題

雙指標:

class

solution

else l++;}

list

ans =

newarraylist()

;for

(int i = l; i <= r; i++

)return ans;

}}

二分法: 說一下解題思路, 用二分法不斷搜尋離x最近的左區間,區間範圍為k+1, 比較一頭一尾離x的範圍再來判斷l和r的變化

class

solution

return ans;

}//x > 陣列最大值

if(x >= arr[arr.length -1]

)return ans;

}//l和r是區間的左邊界取值, 所以r = arr.length - k - 1

int l =

0, r = arr.length - k -1;

while

(l <= r)

else

}// system.out.println("l = " + l + ", r = " + r);

for(

int i = l; i < l + k; i++

)return ans;

}}

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...

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,...

658 找到K個最接近的元素

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