【力扣hot100】刷题笔记Day20

前言

  • 今天学习了一句话“自己如果不努力,屎都吃不上热乎的”,话糙理不糙,与君共勉

35. 搜索插入位置 - 力扣(LeetCode)

  • 二分查找

    • class Solution:def searchInsert(self, nums: List[int], target: int) -> int:n = len(nums)l, r = 0, n - 1while l <= r:              # 左闭右闭mid = l + (r - l) // 2if nums[mid] == target:return midelif nums[mid] < target:l = mid + 1else:r = mid - 1return r + 1   # 应该插入的位置

74. 搜索二维矩阵 - 力扣(LeetCode)

  •  二分查找

    • class Solution:def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:m, n = len(matrix), len(matrix[0])l, r = 0, m * n - 1while l <= r:mid = l + (r - l) // 2row = mid // n  # 转化成矩阵中的行坐标col = mid % n   # 转化成矩阵中的列坐标print(mid, row, col)if matrix[row][col] < target: l = mid + 1elif matrix[row][col] > target:r = mid - 1else:return Truereturn False

34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)

  • 二分查找(左右边界)

    • class Solution:def searchRange(self, nums: List[int], target: int) -> List[int]:# 寻找[target,...,target]的左边界def leftBorder(nums, target):l, r = 0, len(nums) - 1while l <= r:mid = l + (r - l) // 2if nums[mid] >= target:r = mid - 1else:l = mid + 1return l# 寻找[target,...,target]的右边界def rightBorder(nums, target):l, r = 0, len(nums) - 1while l <= r:mid = l + (r - l) // 2if nums[mid] <= target:l = mid + 1else:r = mid - 1return rl_Border = leftBorder(nums, target)r_Border = rightBorder(nums, target)if l_Border <= r_Border:return [l_Border, r_Border]else:  # 排除找不到target的情况return [-1, -1]
  • 二分查找(单边界滑动)

    • class Solution:def searchRange(self, nums: List[int], target: int) -> List[int]:# 寻找[target,...,target]的左边界def leftBorder(nums, target):l, r = 0, len(nums) - 1while l <= r:mid = l + (r - l) // 2if nums[mid] >= target:r = mid - 1else:l = mid + 1return ln = len(nums)l_Border = leftBorder(nums, target)# 处理特殊情况,找不到targetif l_Border == n or nums[l_Border] != target: return [-1,-1]# 允许范围内,右边界向右滑动r_Border = l_Borderwhile r_Border + 1 <= n - 1 and nums[r_Border+1] == target:r_Border += 1return [l_Border, r_Border]

33. 搜索旋转排序数组 - 力扣(LeetCode)

  • 二分查找(寻找有序)

    • class Solution:def search(self, nums: List[int], target: int) -> int:n = len(nums)l, r = 0, n - 1while l <= r:mid = l + (r - l) // 2# mid左侧(包含mid)为有序部分,一个元素nums[0]==nums[mid]也有序,所以要<=if nums[0] <= nums[mid]:if nums[0] <= target < nums[mid]:r = mid - 1elif target == nums[mid]:return midelse:l = mid + 1# mid右侧(包含mid)为有序部分else:if nums[mid] < target <= nums[n - 1] :l = mid + 1elif target == nums[mid]:return midelse:r = mid - 1          return -1

153. 寻找旋转排序数组中的最小值 - 力扣(LeetCode)

  • 二分查找(寻找无序)

    • class Solution:def findMin(self, nums: List[int]) -> int:l, r = 0, len(nums) - 1while l <= r:mid = l + (r - l) // 2# 左边有序,右边无序,去右边找if nums[0] <= nums[mid]:  # <=,考虑[2,1]中l=mid情况,要往右找if mid > 0 and nums[mid-1] > nums[mid]:  # 异常递减值return nums[mid]else:l = mid + 1# 右边有序,左边无序,去左边找else:if mid > 0 and nums[mid-1] > nums[mid]:  # 异常递减值return nums[mid]else:r = mid - 1return nums[0]  # 找不到说明无旋转,nums[0]就是最小# 简洁优化,边界难处理
      class Solution:def findMin(self, nums: List[int]) -> int:l, r = 0, len(nums) - 1if nums[l] <= nums[r]:  # 本身有序返回第一个return nums[l]while l <= r:mid = l + (r - l) // 2if nums[0] <= nums[mid]:  # <=,考虑[2,1]中l=mid情况,要往右找l = mid + 1           # 右边无序往右找else:                     r = mid - 1           # 左边无序往左找return nums[l]

4. 寻找两个正序数组的中位数 - 力扣(LeetCode)

  • 困难题,要递归找两个有序数组的第k大数,看思路讲解和代码实现
  • class Solution:def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:"""给定两个排好序的数组,求他们合并后的第k大数"""def findK(nums1, nums2, k):if len(nums1) == 0:      # 其中一个为空就返回另一个的第k大,对应下标k-1return nums2[k-1]if len(nums2) == 0:return nums1[k-1]  if k == 1:               # 第1大就比较头两个数return min(nums1[0], nums2[0])k1 = min(k//2, len(nums1))  # 划分给nums1的数量,可能不够k2 = min(k-k1, len(nums2))  # 剩余给nums2的数量,可能不够if nums1[k1-1] < nums2[k2-1]:     # 小的数不可能是第k大了,删除后递归去下一层return findK(nums1[k1:], nums2, k-k1)else:  # 由于可能有不够的现象,相等不意味着就是第k大,还要继续分割return findK(nums1, nums2[k2:], k-k2)size = len(nums1) + len(nums2)if size % 2 == 0:  # 偶数left = findK(nums1, nums2, size // 2)       # 10就是找第5right = findK(nums1, nums2, size // 2 + 1)  # 10就是找第6res = (left + right) / 2else:              # 奇数res = findK(nums1, nums2, size // 2 + 1)    # 11就是找第6return res

后言

  • 二分实现和记模板不难,主要是要处理好边界,多在草稿上演算一下就行 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/721500.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react hook: useCallback

useCallback的主要使用场景在于优化性能&#xff0c;并确保当传递回调函数给子组件时&#xff0c;子组件不会因为父组件的重渲染而重新创建函数。 使用场景 1.当你需要将回调函数传递给子组件时&#xff0c;使用useCallback可以确保子组件在重新渲染时不会不必要地重新创建函数…

【金三银四】每日一点面试题(Java--JUC篇)

1、如何在java中实现多线程&#xff1f; 在Java中实现多线程主要有四种方式&#xff1a; 继承 Thread 类 当一个类继承自Java的Thread类时&#xff0c;它就成为一个线程类。您需要做的只是覆盖run方法&#xff0c;该方法包含线程启动后执行的代码。 class MyThread extends …

10亿数据如何快速插入MySQL

最快的速度把10亿条数据导入到数据库,首先需要和面试官明确一下,10亿条数据什么形式存在哪里,每条数据多大,是否有序导入,是否不能重复,数据库是否是MySQL? 有如下约束 10亿条数据,每条数据 1 Kb 数据内容是非结构化的用户访问日志,需要解析后写入到数据库 数据存放在…

CMIP6数据处理方法与典型案例分析

气候变化对农业、生态系统、社会经济以及人类的生存与发展具有深远影响&#xff0c;是当前全球关注的核心议题之一。IPCC&#xff08;Intergovernmental Panel on Climate Change&#xff0c;政府间气候变化专门委员会&#xff09;的第六次评估报告明确&#xff1b;指出&#x…

【笔记】【电子科大 离散数学】 3.谓词逻辑

谓词引入 因为含变量的语句&#xff08;例如x > 3&#xff09;不是命题&#xff0c;无法进行逻辑推理。 为了研究简单命题句子内部的逻辑关系&#xff0c;我们需要对简单命题进行分解&#xff0c;利用个体词&#xff0c;谓词和量词来描述它们&#xff0c;并研究个体与总体…

JavaScript实现鼠标移动特效

关键代码&#xff1a; <script>document.onmousemove function (e) {// 加div节点var div document.createElement(div);div.style.width 5px;div.style.height 5px;// 加img节点var img document.createElement(img);// 将Img追加到div里面。div.appendChild(img);…

Python开发工具:pycharm使用注意事项以及设置

上一篇文章写了pycharm的安装以及运行&#xff0c;但是在安装过程中遇到了一些问题&#xff0c;接下来详细解析安装过程中遇到的问题&#xff0c;注意事项以及设置配置依赖等信息 安装遇到的问题&#xff1a; 协议许可证关闭不了&#xff1a;PyCharm安装完成后&#xff0c;打…

数据传输的同步技术包含哪些?如何高效安全传输数据?

在数字化时代&#xff0c;数据传输的同步技术对于确保信息的一致性和通信质量至关重要。本文将探讨数据传输同步技术的种类、如何实现高效安全的数据传输&#xff0c;以及企业在数据迁移中常用的几种方式。最后&#xff0c;我们将重点介绍镭速大数据迁移工具的优势。 数据传输同…

Python成功解决AttributeError: ‘Series‘ object has no attribute ‘set_value‘

Python成功解决AttributeError: ‘Series‘ object has no attribute ‘set_value‘ &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&am…

简单介绍AudioLM

主要介绍AudioLM&#xff0c;学习资料为知乎文章。这里只介绍核心思想和模块。 AudioLM 基本信息 AudioLM: a Language Modeling Approach to Audio Generation pdf: https://arxiv.org/pdf/2209.03143.pdf 参考资料&#xff1a;https://zhuanlan.zhihu.com/p/637196330 模…

SQL 数据库安全的基本概念和技术

大家好&#xff0c;SQL 是一种功能强大且被广泛使用的操纵关系数据库的语言。数据库开发人员和管理员应该重视数据库安全并承担保护数据安全的责任&#xff0c;确保数据不会被未经授权的访问、修改或删除。本文将介绍 SQL 数据库安全的相关基本概念和技术&#xff0c;帮助大家了…

GPT提示语格式——个人自用

总体格式 指令&#xff1a;将 输入 划分为/翻译为/提取出/... 输出 输出格式&#xff1a;... 输入示例&#xff1a;... 输出示例&#xff1a;... 输入&#xff1a;... 输出&#xff1a;基本概述 示例 指令&#xff1a; 提取以下文本中的介词。 输入&#xff1a;“虽然这些发展…

MQ消息队列

rocketMq 与 kafaka 的区别 RocketMQ 和 Kafka 都是分布式消息中间件&#xff0c;主要用于处理高吞吐量、低延迟的消息传递。它们各自有其特点和适用场景&#xff0c;在以下几个方面存在显著区别&#xff1a; 架构设计&#xff1a; Kafka&#xff1a;采用了多分区&#xff08;p…

Elasticsearch:向量相似度计算 - 可笑的速度

作者&#xff1a;Chris Hegarty 任何向量数据库的核心都是距离函数&#xff0c;它确定两个向量的接近程度。 这些距离函数在索引和搜索期间执行多次。 当合并段或在图表中导航最近邻居时&#xff0c;大部分执行时间都花在比较向量的相似性上。 对这些距离函数进行微观优化是值…

记录一次bug

Component inside renders non-element root node that cannot be animated. 这可能导致 页面切换过度动画失败&#xff0c;导致页面空白&#xff0c;需要有一个公共根组件 放在一个根元素下面即可

STM32利用标准库编写PA0和PA4中断proteus仿真

首先先看看结果吧&#xff1a;昨天学习的是5--9或10--15引脚的中断&#xff0c;如果选择的是0到4口应该怎么办呢&#xff1f;今天就学习的这个&#xff0c;特此记录一下&#xff1a; 整个工程打包好了&#xff0c;直接下载打开就能仿真了&#xff1a; 链接&#xff1a;https:/…

SpringBoot 引入 SPEL 模板字符串替换的两种方式

Spring 表达式语言 (SpEL) 官方文档&#xff1a;https://docs.spring.io/spring-framework/docs/6.0.x/reference/html/core.html#expressions 文章目录 Spring 表达式语言 (SpEL)模板占位符 替换 {$name}common-text 方式&#xff1a;模板字符转替换 ${} 模板占位符 替换 {$n…

「Mybatis实战九」:Mybatis的dao层开发使用 - 代理开发方式

一、前言 ​ 本文将进一步探讨在之前“「Mybatis实战八」&#xff1a;传统开发方式下的Mybatis DAO层构建”所奠定的基础之上&#xff0c;如何运用Mybatis的接口代理开发模式来优化持久层的设计与实现&#xff0c;解决上文中的问题。 二、代理开发方式简介 Mybatis提供的基于…

PCIE的BAR空间

1.PCIe 简介 PCIe&#xff08;Peripheral Component Interconnect Express&#xff09;是一种高速 串行计算机扩展总线标准&#xff0c;主要用于连接主板上的中央处理器&#xff08;CPU&#xff09;和 各种外部设备&#xff0c;如显卡、声卡、硬盘等。PCIe 总线取代了传统的 PC…

前端部署真的不简单

公众号&#xff1a;程序员白特&#xff0c;欢迎一起交流学习~> 原文&#xff1a;前端部署真的不简单 - 掘金 (juejin.cn) 现在大部分的中小型公司部署前端代码都是比较简单的&#xff0c;主要步骤如下: 首先&#xff0c;通过脚手架提供的命令npm run build打包前端代码&…