最近开始刷Leetcode了!!鉴于我并不是计算机科班出身的大佬,那就先从基础的算法开始学习叭!第一章----二分查找问题
二分查找适用于有序数组+无重复元素(这个主要是避免查找到多个元素从而返回多个下标)
典型题目:
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/binary-search
Python解法:(非递归调用)
class Solution:
def search(self, nums: List[int], target: int) -> int:
left=0
right=len(nums)-1
while(left<=right):
middle=int((left+right)/2)
if nums[middle]>target:
right=middle-1
elif nums[middle]<target:
left=middle+1
else:
return middle
return -1
基本想法是先比较target和数组中间元素的大小,再继续对半划分,直到找到元素(或没有target)返回值。*写代码的时候才知道原来函数里只要return过一次就会结束调用,后面的return值不会再输出,我是憨憨
这个写法在Leetcode上的得分不是很高:
执行用时:52 ms, 在所有 Python3 提交中击败了14.89%的用户
内存消耗:16.1 MB, 在所有 Python3 提交中击败了38.71%的用户