IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> leecode 力扣刷题 #704 二分查找 (简单) -> 正文阅读

[数据结构与算法]leecode 力扣刷题 #704 二分查找 (简单)

好久没有刷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 = 0
        #right = len(nums)-1
        left, right = 0, len(nums)-1#原来写一句真的比拆开两句写要快诶,一句是16ms,两句是28ms,差太多了吧!!!决定以后都这样写了

        while left <= right:#左边界小于等于右边界,逻辑正常
            mid = left + (right-left)/2#听说(left+right)/2会有问题,改成 2left/2 + (right-left)/2 比较好
            if nums[mid] == target:#很久没写python,差点忘记要==而不是=了
                return mid
            elif nums[mid] < target:#target在右,left往右移动一格,逐步逼近target
                left = mid + 1
            else:#target在左,right往左移动一格,逐步逼近target
                right = mid -1
        return -1#左边界大于右边界,逻辑不正常,逼近到走过头了都没有发现target,说不存在那个满足以上正常条的target,跳出回圈给-1即可
        
        #方法二:一个一个数,最慢的做法,5436ms,我的个老天鹅鹅鹅丫( oΔo )
        #for i in range(len(nums)):
        #    if target in nums:
        #        if nums[i] == target:
        #            return i
        #    else:
        #        return -1

leecode实测截图:
在这里插入图片描述
在这里插入图片描述
太好了,可以去刷下一题了,我发现我真的是年纪越大越容易满足的一个人耶~ (?????)
希望看到这篇文章的小伙伴觉得有帮助,然后继续心情美美的一天~ d(`・?・)b

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 21:17:10  更:2022-03-21 21:21:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 11:54:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码