python题目怎么做搜索python题目的软件python题目搜索网址
下载地址 https://share.weiyun.com/OvviwGnZ
资料目录 Python练习集100题 100道Python面试题 Python100经典练习题 Python经典题目100道题 Python题库(已收录100道真题) Python100例视频讲解课程 菜鸟教程Python教程100例 130道python练习题,涵盖基础内容的方方面面 Python考试题复习知识点试卷试题 PYTHON测试题和答案 python第一阶段考试题 Python经典面试题和答案解析 python期末考试复习试卷 python习题集大全(附答案解析) 老男孩Python全栈7期练习题(面试真题模拟) 尚观python第一阶段考试(面试真题模拟) 《Python程序设计基础与应用》习题答案 《Python快速编程入门》——课后题答案 Python编程基础张健 , 张良均课后习题及答案 Python程序设计基础及实践(慕课版)郭炜习题答案 Python程序设计基础习题答案与分析 python基础试题(含答案)
举例 找到 K 个最接近的元素 题目要求 给定一个排序好的数组,两个整数 k 和 x,从数组中找到最靠近 x(两数之差最小)的 k 个数。返回的结果必须要是按升序排好的。如果有两个数与 x 的差值一样,优先选择数值较小的那个数 输入: [1, 5, 8, 9, 17, 20], k=4, x=10 输出: [5, 8, 9, 17] 思路分析 第一个大于等于目标值的元素位置 题目要求找到K个最接近目标值的元素,我们先不考虑K个,而是考虑1个的情况,也就是最接近目标值的那个元素。 如果数组里有某个元素恰好和目标值相等,那么问题就转变成了二分查找法,在数组中查找目标值。如果数组里没有目标值呢,如何找到距离目标值最近的元素呢? 不妨先找到第一个大于等于目标值的元素,找到了这个元素,也就容易找到距离目标值最近的那个元素了,分析到这里,我们先要实现一个函数,该函数可以从数组中找到第一个大于等于目标值的元素位置,下面是这个函数的示例代码 def find_eg_index(lst, start, end, target): """ 找到第一个大于等于target的元素的位置, 如果lst中最大的元素小于target 则返回len(lst) :param lst: :param start: :param end: :param target: :return: """ if start > end: return end + 1 middle = (start + end)//2 middle_value = lst[middle] if middle_value == target: return middle elif middle_value < target: return find_eg_index(lst, middle+1, end, target) else: return find_eg_index(lst, start, middle-1, target) 一定要记得考虑边界条件,如果目标值比数组最小值还小,那么函数返回0是应当的,但如果目标值比数组中最大值还大,该返回什么呢?为了概念的完整性,我这里返回len(lst), 这个索引是超出数组范围的,这表示无穷大,无穷大当然大于等于target 距离目标值最近的元素位置 前面的find_eg_index函数返回了第一个大于等于target的元素的位置eg_index,在此基础上,很容易就算出来距离target最近的元素的位置,所要考虑的逻辑分支如下 • eg_index == len(lst), target > max(lst), 数组最后一个元素最接近target • eg_index == 0, 数组第一个元素最接近target • target - lst[eg_index-1] <= lst[eg_index] - target, 说明lst[eg_index-1]更接近target, 反之lst[eg_index]更接近target 实现函数find_closest_index(lst, target) ,返回数组中距离target最近的元素的位置 def find_closest_index(lst, target): """ 寻找距离target最近的位置 :param lst: :param target: :return: """ eg_index = find_eg_index(lst, 0, len(lst)-1, target) if eg_index == len(lst): return eg_index - 1 elif eg_index == 0: return 0 else: if target - lst[eg_index-1] <= lst[eg_index] - target: return eg_index-1 else: return eg_index
|