好久没有刷leetcode了,选一题简单的试试手(^-^)V
#704:
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/binary-search
解题思路:
一个一个找,然后发现超级无敌慢,放在最后被#起来的方法二了,没看清楚题目二分!二分!二分!还以为从list里一个一个找是常规操作。看了官方解释,自己试了一下,快好多我的妈呀!具体思路代码后面有#的备注,边看代码边看备注应该会比较好理解。简单来说就是以下规则:
1. list的头和尾分别叫left和right,对半切开叫mid。正常情况是left小于等于right,这个逻辑我们先定义清楚。 2. target在mid左边,则right=mid-1,继续对左边一半的list做砍半的动作,直到找到target。 3. target在mid右边,则left=mid+1,继续对右边一半的list做砍半的动作,直到找到target。 4. 如果2和3做到left都大于right了,说明以上逼近target的动作已经扫过了整个list,但没有扫到任何叫target的东西,它不存在,跳出回圈,直接给-1即可
写完发现我好像很啰嗦。emmm,我的脑子:简单说一下。我的手:不小心就打了4句话。
实测:
class Solution(object):
def search(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
left, right = 0, len(nums)-1
while left <= right:
mid = left + (right-left)/2
if nums[mid] == target:
return mid
elif nums[mid] < target:
left = mid + 1
else:
right = mid -1
return -1
leecode实测截图: 太好了,可以去刷下一题了,我发现我真的是年纪越大越容易满足的一个人耶~ (?????) 希望看到这篇文章的小伙伴觉得有帮助,然后继续心情美美的一天~ d(`・?・)b
|