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