658. 找到 K 个最接近的元素658. 找到 K 个最接近的元素
思路:
1.已经排序好了,可以直接用双指针比较两端和要找的值的差距大小然后删除到只有k个元素为止,但是这题要二分查找,这样写很不给他面子,所以试试二分查找
2.二分法。
658. 找到 K 个最接近的元素
代码:
思路1
class Solution:
def findClosestElements(self, arr: List[int], k: int, x: int) -> List[int]:
n = len(arr)
l, r = 0, n - 1
while r - l + 1 > k:
a, b = x - arr[l], arr[r] - x
if a > b:
l += 1
else:
r -= 1
return arr[l:r + 1]
思路2
class Solution(object):
def findClosestElements(self, arr, k, x):
left = 0
right = len(arr) - k
while (left < right) :
mid = left + (right - left) // 2
if (x - arr[mid] > arr[mid + k] - x) :
left = mid + 1
else :
right = mid
return arr[left : left + k]
1894. 找到需要补充粉笔的学生编号
1894. 找到需要补充粉笔的学生编号 - 力扣(LeetCode) (leetcode-cn.com)
思路:
1.先找到最后一次循环的粉笔数量
2.然后按要求找最后一轮到谁截止
代码:
class Solution:
def chalkReplacer(self, chalk: List[int], k: int) -> int:
k %= sum(chalk)
# 得到最后一轮的情况
for x, i in enumerate(chalk):
if k >= i:
k -= i
else:
return x
以上
坚持 共勉