Leetcode面试经典150题刷题记录 —— 二分查找篇

ops/2025/2/10 21:54:11/
Leetcode面试经典150题刷题记录-系列
Leetcod面试经典150题刷题记录——数组 / 字符串篇
Leetcod面试经典150题刷题记录 —— 双指针篇
Leetcod面试经典150题刷题记录 —— 矩阵篇
Leetcod面试经典150题刷题记录 —— 滑动窗口篇
Leetcod面试经典150题刷题记录 —— 哈希表篇
Leetcod面试经典150题刷题记录 —— 区间篇
Leetcod面试经典150题刷题记录——栈篇
Leetcod面试经典150题刷题记录——链表篇
Leetcod面试经典150题刷题记录——二叉树篇
Leetcod面试经典150题刷题记录——二叉树层次遍历篇
Leetcod面试经典150题刷题记录——二叉搜索树篇

Leetcode面试经典150题刷题记录 —— 二分查找篇

    • 1. 搜索插入位置
    • 2. 搜索二维矩阵

1. 搜索插入位置

题目链接:搜索插入位置 - leetcode
题目描述:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n)算法
题目归纳:

解题思路:
解法: 搜索插入位置 - leetcode官方题解

class Solution:def searchInsert(self, nums: List[int], target: int) -> int:left, right = 0, len(nums) - 1while left <= right:mid = left + (right - left) // 2# 此条件不成立时,有nums[mid] >= target,此时left即正确下标if nums[mid] < target: left = mid + 1else:right = mid - 1return left

2. 搜索二维矩阵

题目链接:搜索二维矩阵 - leetcode
题目描述:
给你一个满足下述两条属性的 m x n 整数矩阵:
每行中的整数从左到右按非严格递增顺序排列。
每行的第一个整数大于前一行的最后一个整数。
给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false
题目归纳:

解题思路:
解法: 搜索二维矩阵 - leetcode官方题解

class Solution:def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:row = self.binarySearchFirstRow(matrix, target)print(row)if row < 0:return Falsereturn self.binarySearch(matrix[row], target)def binarySearchFirstRow(self, matrix: List[List[int]], target: int) -> int:top, bottom = 0, len(matrix) - 1while top < bottom:mid = top + (bottom - top + 1) // 2 # 这样mid会更偏向bottom,从而可以最终使top = bottom使循环终止if matrix[mid][0] <= target:top = mid # 由于top不存在+1操作,所以不能用top <= bottom,很可能top一直等于bottomelse:bottom = mid - 1return topdef binarySearch(self, array:List[int], target):left, right = 0, len(array) - 1while left <= right:mid = left + (right - left) // 2if array[mid] == target:return Trueelif array[mid] < target:left = mid + 1elif array[mid] > target:right = mid - 1return False

关于二分查找的下标和写法问题,请看文章[1]

参考文章与视频链接
[1]数据结构与算法 —— 常用算法模版

http://www.ppmy.cn/ops/157363.html

相关文章

c/c++蓝桥杯经典编程题100道(9)数组排序

数组排序 ->返回c/c蓝桥杯经典编程题100道-目录 目录 数组排序 一、题型解释 二、例题问题描述 三、C语言实现 解法1&#xff1a;冒泡排序&#xff08;难度★&#xff09; 解法2&#xff1a;选择排序&#xff08;难度★&#xff09; 解法3&#xff1a;快速排序&#…

selenium4.0 入门案例

from selenium import webdriver import time #创建webdriver对象&#xff0c;把驱动放置到了系统环境变量中&#xff0c;可不带参数创建 # driver webdriver.Firefox() driver webdriver.Chrome() #使用浏览器打开指定页面 driver.get(http://www.baidu.com)time.sleep(5) #回…

JMeter使用BeanShell将数据写入CSV文件(引用deepseek)

在 JMeter 中&#xff0c;你可以使用 BeanShell 脚本将数据写入 CSV 文件。以下是一个示例脚本&#xff0c;展示了如何通过 BeanShell 将数据写入 CSV 文件。 1. 添加 BeanShell 取样器 首先&#xff0c;在 JMeter 中添加一个 BeanShell Sampler。 2. 编写 BeanShell 脚本 …

ML.NET库学习004:ML.NET基础知识复盘

文章目录 ML.NET库学习004&#xff1a;ML.NET基础知识复盘背景简单的 ML.NET 应用程序代码工作流机器学习模型基础进阶 ML.NET 架构构建管道训练模型使用模型 数据模型和架构模型部署 ML.NET库学习004&#xff1a;ML.NET基础知识复盘 学了几个小项目&#xff0c;发现好多方法莫…

提示工程:少样本提示(Few-shot Prompting)

少样本提示&#xff08;Few-shot Prompting&#xff09;是一种利用大语言模型从少量示例样本中学习并处理任务的方法。它的核心思想是利用大语言模型的上下文学习能力&#xff0c;通过在提示中增加“示例样本”来启发大语言模型达到举一反三的效果。这种方法避免了重新训练或者…

SPI通信及设备驱动

3.SPI通信-重要 参考博客&#xff1a;SPI原理超详细讲解---值得一看-CSDN博客 SPI(Serial Peripheral interface)**串行外围设备接口** SPI&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且在芯片的管脚上只占用四根线&#xff0c;节…

配置 VS Code 调试 ROS Python 脚本:完整步骤

在 Ubuntu 系统上使用 ROS 和 VS Code 进行 Python 开发时&#xff0c;可能会遇到一些环境配置的问题&#xff0c;特别是当需要加载 ROS 环境变量以及确保正确使用 Python 3 环境时。以下是如何配置 launch.json 和 tasks.json 来确保 VS Code 调试环境能够正确加载 ROS 和 Pyt…

webpack系统学习

webpack4和webpack5区别1---loader_webpack4与webpack5处理图片的不同-CSDN博客 webpack4和webpack5区别2---代码压缩_webpack4如何使用terser-CSDN博客 webpack4和webpack5区别3---缓存_cacheprune-CSDN博客 webpack4和webpack5区别4---自动清除打包目录_webpack4打包目录清…