[问题] leetcode 658

楼主: sean72 (.)   2018-07-28 07:47:08
658. Find K Closest Elements
https://leetcode.com/problems/find-k-closest-elements/description/
https://paste.ubuntu.com/p/TCH82fyZ4j/
整段代码是可以通过的
但是有很多幸运成份,自己也想不通,
目标:找到一个窗口size k ,此窗口里面元素尽量靠近target x
若是距离x一样,窗口尽量靠左
假设窗口左端点为s 和 e
二分法移动选取窗口
# s...m.......x...m+k-1...e
# 如果x比左端点远,则s右移,使得窗口右移
# 反之,e左移,使得窗口左移
# 问题:如果x距离左右端点距离相同 x - arr[m] == arr[m+k-1] - x
# 应该左移还是右移?
# 我误打误撞选了左移
(自问自答:因为题目说,若是相同,则尽量取靠左)
# 离开while loop后,考虑答案为 arr[s : s+k] or arr[e : e+k]
# 为什么下面这样是对的?
作者: handsomeLin (DoGLin)   2018-07-28 08:12:00
loop完之后你的s e差是1 你的if是比窗口第一个跟窗口外的第一个 所以最后选窗口要不要右移 就这样

Links booklink

Contact Us: admin [ a t ] ucptt.com