当前位置: 首页 > news >正文

【力扣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

后言

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

相关文章:

【力扣hot100】刷题笔记Day20

前言 今天学习了一句话“自己如果不努力&#xff0c;屎都吃不上热乎的”&#xff0c;话糙理不糙&#xff0c;与君共勉 35. 搜索插入位置 - 力扣&#xff08;LeetCode&#xff09; 二分查找 class Solution:def searchInsert(self, nums: List[int], target: int) -> int:n…...

Redis 之八:Jdeis API 的使用(Java 操作 Redis)

Jedis API 使用 Jedis 是 Redis 官方推荐的 Java 客户端&#xff0c;它提供了一套丰富的 API 来操作 Redis 服务器。通过 Jedis API&#xff0c;开发者可以方便地在 Java 应用程序中执行 Redis 的命令来实现数据的增删查改以及各种复杂的数据结构操作。 以下是一些基本的 Jedis…...

Docker 应用入门

一、Docker产生的意义 1‘解决环境配置难题&#xff1a;在软件开发中最大的麻烦事之一&#xff0c;就是环境配置。为了跑我们的程序需要装各种插件&#xff0c;操作系统差异、不同的版本插件都可能对程序产生影响。于是只能说&#xff1a;程序在我电脑上跑是正常的。 2’解决资…...

朱维群将出席用碳不排碳碳中和顶层科技路线设计开发

演讲嘉宾&#xff1a;朱维群 演讲题目&#xff1a;“用碳不排碳”碳中和顶层科技路线设计开发 简介 姓名&#xff1a;朱维群 性别&#xff1a;男 出生日期&#xff1a;1961-09-09 职称&#xff1a;教授 1998年毕业于大连理工大学精细化工国家重点实验室精细化工专业&#x…...

linux如何查看磁盘占用情况

要查看Linux系统中磁盘的占用情况&#xff0c;可以使用一些命令来获取相关信息。以下是一些常用的命令&#xff1a; df命令&#xff1a; df命令用于显示文件系统的磁盘空间使用情况&#xff0c;包括磁盘分区的总空间、已用空间、可用空间等信息。 df -h使用 -h 参数可以以人类可…...

【C++庖丁解牛】类与对象

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 目录 1.面向过程和面向对象…...

在什么时候企业档案才会发生调整

档案在企业中通常会调整在以下几个时刻&#xff1a; 1. 入职时&#xff1a;员工入职时&#xff0c;企业会要求员工提供个人档案&#xff0c;包括身份证件、学历证明、工作经历等相关文件。 2. 离职时&#xff1a;员工离职时&#xff0c;企业会整理员工的离职档案&#xff0c;包…...

Linux或Windows下判断socket连接状态

前言 场景&#xff1a;客户端程序需要实时知道和服务器的连接状态。比较通用的做法应用层是采用心跳机制&#xff0c;每隔一端时间发送心跳能回复说明服务器正常。 实际应用场景中&#xff0c;服务端和客户端并不是一家厂商的&#xff0c;比如说笔者这种情况&#xff0c;服务端…...

编译链接实战(25)gcc ASAN、MSAN检测内存越界、泄露、使用未初始化内存等内存相关错误

文章目录 1 ASAN1.1 介绍1.2 原理编译时插桩模块运行时库2 检测示例2.1 内存越界2.2 内存泄露内存泄露检测原理作用域外访问2.3 使用已经释放的内存2.4 将漏洞信息输出文件3 MSAN1 ASAN 1.1 介绍 -fsanitize=address是一个编译器选项,用于启用AddressSanitizer(地址...

[HackMyVM]靶场 VivifyTech

kali:192.168.56.104 主机发现 arp-scan -l # arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:d2:e0:49, IPv4: 192.168.56.104 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.56.1 0a:00:27:00:00:05 (Unk…...

软考高级系统分析师:关联关系、依赖关系、实现关系和泛化关系概念和例题

一、AI 解读 关联关系、依赖关系、实现关系和泛化关系是面向对象设计中的四种基本关系。它们在类与类之间建立不同类型的联系&#xff0c;以反映对象间的相互作用、依赖和继承关系。下面我将使用表格的形式来解释这四种关系的概念和它们之间的区别&#xff1a; 关系类型概念特…...

设计模式学习笔记 - 面向对象 - 9.实践:如何进行面向对象分析、设计与编码

1.如何对接口鉴权这样一个功能开发做面向对象分析 本章会结合一个真实的案例&#xff0c;从基础的需求分析、职责划分、类的定义、交互、组装运行讲起&#xff0c;将最基础的面向对象分析&#xff08;00A&#xff09;、设计&#xff08;00D&#xff09;、编程&#xff08;00P&…...

【iOS ARKit】RealityKit 同步机制

协作 Session 可以很方便地实现多用户之间的AR体验实时共享&#xff0c;但开发者需要自行负责并确保AR场景的完整性&#xff0c;自行负责虚拟物体的创建与销毁。为简化同步操作&#xff0c;RealityKit 内建了同步机制&#xff0c;RealityKit 同步机制基于 Multipeer Connectivi…...

【数据结构与算法】整数二分

问题描述 对一个排好序的数组&#xff0c;要求找到大于等于7的最小位置和小于等于7的最大位置 大于等于7的最小位置 易知从某个点开始到最右边的边界都满足条件&#xff0c;我们要找到这个区域的最左边的点。 开始二分&#xff01; left指针指向最左边界&#xff0c;right…...

java项目打包运行报异常:xxxxx-1.0-SNAPSHOT.jar中没有主清单属性

pom.xml中加入这段话即可 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.4.4</version><executions><execution><…...

MAC-键盘command快捷键、设置windows快捷键

在 Windows PC 专用键盘上&#xff0c;请用 Alt 键代替 Option 键&#xff0c;用 Ctrl 键或 Windows 标志键代替 Command 键。 Mac 键盘快捷键 - 官方 Apple 支持 (中国) 设置windows快捷键 使用mac外接适用于windows的键盘时&#xff0c;如何设置快捷键&#xff1f;_mac外…...

C++ 补充之常用遍历算法

C遍历算法和原理 C标准库提供了丰富的遍历算法&#xff0c;涵盖了各种不同的功能。以下是一些常见的C遍历算法以及它们的概念和原理的简要讲解&#xff1a; for_each&#xff1a;对容器中的每个元素应用指定的函数。 概念&#xff1a;对于给定的容器和一个可调用对象&#xff…...

【Linux杂货铺】调试工具gdb的使用

目录 &#x1f308;前言&#x1f308; &#x1f4c1;背景介绍 &#x1f4c1; 使用 list [行号] / [函数名] run/r break/b [行号] / [函数名] info break disable break enable break delete break [断点编号] next/n step/s continue/c finish print/p [变量…...

FL Studio Producer Edition2024中文进阶版Win/Mac

FL Studio Producer Edition&#xff0c;特别是其【中文进阶版 Win/Mac】&#xff0c;是数字音乐制作领域中的一款知名软件。它为广大音乐制作人、声音工程师以及音乐爱好者提供了一个从音乐构思到最终作品发布的完整解决方案。这个版本特别为中文用户优化&#xff0c;并兼容W…...

无需邀请码,Xinstall实现精准分享归因

在如今的移动互联网时代&#xff0c;分享已经成为了我们日常生活中不可或缺的一部分。无论是社交媒体上的好友分享&#xff0c;还是应用内的内容分享&#xff0c;分享都能够帮助我们快速传播信息&#xff0c;扩大影响力。然而&#xff0c;对于开发者而言&#xff0c;分享却带来…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...