【力扣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
前言 今天学习了一句话“自己如果不努力,屎都吃不上热乎的”,话糙理不糙,与君共勉 35. 搜索插入位置 - 力扣(LeetCode) 二分查找 class Solution:def searchInsert(self, nums: List[int], target: int) -> int:n…...
Redis 之八:Jdeis API 的使用(Java 操作 Redis)
Jedis API 使用 Jedis 是 Redis 官方推荐的 Java 客户端,它提供了一套丰富的 API 来操作 Redis 服务器。通过 Jedis API,开发者可以方便地在 Java 应用程序中执行 Redis 的命令来实现数据的增删查改以及各种复杂的数据结构操作。 以下是一些基本的 Jedis…...
Docker 应用入门
一、Docker产生的意义 1‘解决环境配置难题:在软件开发中最大的麻烦事之一,就是环境配置。为了跑我们的程序需要装各种插件,操作系统差异、不同的版本插件都可能对程序产生影响。于是只能说:程序在我电脑上跑是正常的。 2’解决资…...
朱维群将出席用碳不排碳碳中和顶层科技路线设计开发
演讲嘉宾:朱维群 演讲题目:“用碳不排碳”碳中和顶层科技路线设计开发 简介 姓名:朱维群 性别:男 出生日期:1961-09-09 职称:教授 1998年毕业于大连理工大学精细化工国家重点实验室精细化工专业&#x…...
linux如何查看磁盘占用情况
要查看Linux系统中磁盘的占用情况,可以使用一些命令来获取相关信息。以下是一些常用的命令: df命令: df命令用于显示文件系统的磁盘空间使用情况,包括磁盘分区的总空间、已用空间、可用空间等信息。 df -h使用 -h 参数可以以人类可…...
【C++庖丁解牛】类与对象
📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 目录 1.面向过程和面向对象…...
在什么时候企业档案才会发生调整
档案在企业中通常会调整在以下几个时刻: 1. 入职时:员工入职时,企业会要求员工提供个人档案,包括身份证件、学历证明、工作经历等相关文件。 2. 离职时:员工离职时,企业会整理员工的离职档案,包…...
Linux或Windows下判断socket连接状态
前言 场景:客户端程序需要实时知道和服务器的连接状态。比较通用的做法应用层是采用心跳机制,每隔一端时间发送心跳能回复说明服务器正常。 实际应用场景中,服务端和客户端并不是一家厂商的,比如说笔者这种情况,服务端…...
编译链接实战(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 解读 关联关系、依赖关系、实现关系和泛化关系是面向对象设计中的四种基本关系。它们在类与类之间建立不同类型的联系,以反映对象间的相互作用、依赖和继承关系。下面我将使用表格的形式来解释这四种关系的概念和它们之间的区别: 关系类型概念特…...
设计模式学习笔记 - 面向对象 - 9.实践:如何进行面向对象分析、设计与编码
1.如何对接口鉴权这样一个功能开发做面向对象分析 本章会结合一个真实的案例,从基础的需求分析、职责划分、类的定义、交互、组装运行讲起,将最基础的面向对象分析(00A)、设计(00D)、编程(00P&…...
【iOS ARKit】RealityKit 同步机制
协作 Session 可以很方便地实现多用户之间的AR体验实时共享,但开发者需要自行负责并确保AR场景的完整性,自行负责虚拟物体的创建与销毁。为简化同步操作,RealityKit 内建了同步机制,RealityKit 同步机制基于 Multipeer Connectivi…...
【数据结构与算法】整数二分
问题描述 对一个排好序的数组,要求找到大于等于7的最小位置和小于等于7的最大位置 大于等于7的最小位置 易知从某个点开始到最右边的边界都满足条件,我们要找到这个区域的最左边的点。 开始二分! left指针指向最左边界,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 专用键盘上,请用 Alt 键代替 Option 键,用 Ctrl 键或 Windows 标志键代替 Command 键。 Mac 键盘快捷键 - 官方 Apple 支持 (中国) 设置windows快捷键 使用mac外接适用于windows的键盘时,如何设置快捷键?_mac外…...
C++ 补充之常用遍历算法
C遍历算法和原理 C标准库提供了丰富的遍历算法,涵盖了各种不同的功能。以下是一些常见的C遍历算法以及它们的概念和原理的简要讲解: for_each:对容器中的每个元素应用指定的函数。 概念:对于给定的容器和一个可调用对象ÿ…...
【Linux杂货铺】调试工具gdb的使用
目录 🌈前言🌈 📁背景介绍 📁 使用 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,特别是其【中文进阶版 Win/Mac】,是数字音乐制作领域中的一款知名软件。它为广大音乐制作人、声音工程师以及音乐爱好者提供了一个从音乐构思到最终作品发布的完整解决方案。这个版本特别为中文用户优化,并兼容W…...
无需邀请码,Xinstall实现精准分享归因
在如今的移动互联网时代,分享已经成为了我们日常生活中不可或缺的一部分。无论是社交媒体上的好友分享,还是应用内的内容分享,分享都能够帮助我们快速传播信息,扩大影响力。然而,对于开发者而言,分享却带来…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...
TJCTF 2025
还以为是天津的。这个比较容易,虽然绕了点弯,可还是把CP AK了,不过我会的别人也会,还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...
CppCon 2015 学习:REFLECTION TECHNIQUES IN C++
关于 Reflection(反射) 这个概念,总结一下: Reflection(反射)是什么? 反射是对类型的自我检查能力(Introspection) 可以查看类的成员变量、成员函数等信息。反射允许枚…...
