首页 > 编程语言 >[Python手撕]二分法

[Python手撕]二分法

时间:2024-08-31 11:38:10浏览次数:9  
标签:right target nums Python mid 二分法 result left

二分法

二分法的几个位置

比如

0 1 2 3 4 5 6 7 8 9
1 2 3 3 3 3 3 4 5 6

有时候想要寻找小于3的最大数字

有时候想要寻找第一个满足>=3的数字,

有时候想要寻找最后一个满足>=3的数字,

有时候想要寻找小于4的最大数字

nums = [1, 2, 3, 4, 5, 5, 5, 5, 5, 6, 7, 8, 9]
n = len(nums)

left = 0
right = n - 1
result = -1
target = 5
while left <= right:
    mid = (left + right) // 2

    if nums[mid] < target:
        result = mid
        left = mid + 1
    else:
        right = mid - 1

print(result, nums[result])

left = 0
right = n - 1
result = -1
target = 5
while left <= right:
    mid = (left + right) // 2

    if nums[mid] > target:
        result = mid
        right = mid - 1
    else:
        left = mid + 1

print(result, nums[result])

left = 0
right = n - 1
result = -1
target = 5
while left <= right:
    mid = (left + right) // 2

    if nums[mid] == target:
        result = mid
        right = mid - 1
    elif nums[mid] > target:
        right = mid - 1
    else:
        left = mid + 1

print(result, nums[result])

left = 0
right = n - 1
result = -1
target = 5
while left <= right:
    mid = (left + right) // 2

    if nums[mid] == target:
        result = mid
        left = mid + 1
    elif nums[mid] > target:
        right = mid - 1
    else:
        left = mid + 1

print(result, nums[result])

标签:right,target,nums,Python,mid,二分法,result,left
From: https://www.cnblogs.com/DCFV/p/18390045

相关文章

  • [Python手撕]TOPK
    TOPK问题描述:从arr[1,n]这n个数中,找出最大的k个数,这就是经典的TopK问题。栗子:从arr[1,12]={5,3,7,1,8,2,9,4,7,2,6,6}这n=12个数中,找出最大的k=5个。整体排序排序是最容易想到的方法,将n个数排序之后,取出最大的k个,即为所得。伪代码:sort(arr,1,n);returnarr[1,k];......
  • 豆包 API 调用示例代码详解-Python版
    文章目录豆包API调用示例代码详解-Python版一、事前准备二、所需Python包三、代码详解五、源码下载四、总结豆包官方API文档豆包API调用示例代码详解-Python版在本文中,我们将详细介绍如何使用Python调用豆包API,并提供相关的事前准备和代码执行步骤。一、......
  • 使用 Python 实现自动化办公
    使用Python实现自动化办公在现代办公环境中,自动化是提高工作效率和减少人为错误的重要手段之一。Python是一种功能强大且灵活的编程语言,可以轻松地实现自动化办公任务。下面是一个简单的示例,展示如何使用Python实现自动化办公:需求:假设我们有一个Excel文件,名为"报表.xls......
  • [Python办公]一文入门图论Graphs,轻松处理最短路径等问题!
            [Python办公]一文入门图论Graphs,轻松处理最短路径等问题!        图论是研究图这种数学结构的性质和应用的学科。图(Graphs)由节点(或顶点)和连接这些节点的边组成,它是一种强大的数据结构,广泛应用于各种领域。以下举例用最短距离来入门图论。入门问题: ......
  • Python数据清洗基础
    在Python中进行数据清洗和可视化是一个多步骤的过程,涉及到数据的读取、预处理、分析和图形表示。以下是一些关键步骤和代码示例,这些步骤可以帮助你从原始数据中提取有价值的信息,并以直观的方式展示。数据清洗读取数据:importpandasaspddata=pd.read_csv('data.csv')处......
  • [Python知识点]list列表append()和extend()的区别
    在Python中,list.append()和list.extend()都是列表(list)的方法,用于添加元素,但它们的工作方式有所不同:list.append(x):这个方法将对象x添加到列表的末尾。x可以是任何数据类型,包括列表。如果x是一个列表,那么这个列表会被作为一个单个元素添加到原列表的末尾。list.extend(itera......
  • 6种有效的时间序列数据特征工程技术(使用Python)
    在商业分析中,"时间"是一个核心概念。我们基于时间组件来分析销售数据、收入、利润、增长,甚至进行预测。然而,对于初学者来说,这可能是一个复杂的主题。在处理时间敏感的数据集时,需要考虑时间序列数据的多个细微方面。在这个领域,没有放之四海而皆准的方法。我们不必总是强制使用传......
  • python学习总结--面向对象
    1.面向对象(上)1.1定义面向对象编程:oop[objectorientedprogramming]是一种python的编程思路;面向过程:就是我们一开始学习的,按照解决问题的步骤去写代码【根据业务逻辑去写代码】,在思考问题的时候,首先分析'怎么按照步骤去实现'然后将问题解决拆解成若干个步骤,并将这些步骤对......
  • 【python】PyQt5中富文本框QTextEdit的详细教程与应用实战
    ✨✨欢迎大家来到景天科技苑✨✨......
  • python 绘制双y轴,将折线加粗并在折线上做标记
    之前的笔记折线实在是太细了,并且还有点透明,放在论文中特别难看,现在修改一下折线,并且绘制双y轴 #!usr/bin/envpython#-*-coding:utf-8_*-"""@author:Suyue@file:jakjdklj.py@time:2024/08/30{DAY}@desc:"""importpandasaspdimportmatplotlibimportmatplo......