力扣100题—持续更新

目录

  • LC141环形列表(easy)
    • 题目描述
    • 方法1:快慢指针
      • (1)思路
      • (2)python代码
      • (3)复杂度分析
  • LC881救生艇(medium)
    • 题目描述
    • 方法1:双指针-对撞指针
      • (1)思路
      • (2)Python代码
      • (3)复杂度分析
  • LC11成最多水的容器 medium
    • 1. 题目描述
    • 方法:双指针
      • (1)思路
      • (2)python代码
      • (3)复杂度分析
  • LC704二分查找 easy
    • 题目描述
    • 方法:二分查找法
      • (2)python代码
      • (3)复杂度分析
      • (4)说明
  • LC35 搜索插入位置 easy (二分查找法变种问题)
    • 问题描述
    • 方法:二分查找
      • (1)思路
      • (2)python

LC141环形列表(easy)

题目描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

方法1:快慢指针

(1)思路

使用快慢指针特性:每轮移动之后两者的距离会加一。
当一个链表有环时,快慢指针都会陷入环中进行无限次移动,然后变成了追及问题。想象一下在操场跑步的场景,只要一直跑下去,快的总会追上慢的。
在这里插入图片描述
💥 如果存在环,如何判断环的长度呢?
快慢指针相遇后继续移动,直到第二次相遇。两次相遇间的移动次数即为环的长度。

(2)python代码

class Solution:def hasCycle(self, head: Optional[ListNode]) -> bool:# 快慢指针# time complexity = O(N)# space complexity = O(1)slow = headfast = head# 注意判断条件:fast, fast.next都不为None,才能循环# fast.next不为 None,也是为了使 fast.next.next 能够被定义while (fast is not None and fast.next is not None):slow = slow.nextfast = fast.next.nextif slow == fast:return Truereturn False         

(3)复杂度分析

在这里插入图片描述

LC881救生艇(medium)

题目描述

给定每个人的体重和救生艇的最大乘重,问需要多少条船。其中,一个船最多乘两人。
在这里插入图片描述

方法1:双指针-对撞指针

(1)思路

为什么会想到对撞指针?
对撞指针就很适合需要把一串数的两个加起来,判断是否小于一个数的情况(LC1两数之和)
对撞指针的特性就是:一定要先排序(time complexity= o(nlogn)
差一张图

(2)Python代码

class Solution:def numRescueBoats(self, people: List[int], limit: int) -> int:# 双指针——对撞指针# time complexity = o(nlogn)# space complexity = o(1)people.sort() # first step 一定是排序 time complexity = o(nlogn)n = len(people)    if people is None and n == 0: # 考虑没有人的情况return 0 left = 0right = n - 1ship = 0while left <= right: # 对撞指针时间复杂度是o(n)if people[left] + people[right] <= limit:left+= 1right -= 1ship += 1return ship

(3)复杂度分析

time complexity = O ( n l o g n ) O(nlogn) O(nlogn) 主要是排序的时间复杂度
space complexity = O ( 1 ) O(1) O(1) 只用了两个指针

LC11成最多水的容器 medium

1. 题目描述

给一组数据height,代表一列高,需要做的是,从中找出两个,和x周共同构成容器,可以容纳更多的水。
在这里插入图片描述
输入:[1,8,6,2,5,4,8,3,7]
输出:49
解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49

方法:双指针

(1)思路

核心思想:短板决定容器的高度,要移动短板

(2)python代码

class Solution:def maxArea(self, height: List[int]) -> int:# time complexity = o(n) 双指针需要遍历一遍底边长度也就是height的大小n# space complexity = o(1) 使用的都是常数,没有新建数组n = len(height)left,right = 0,n-1max_water = 0while left < right:h = min(height[left],height[right]) # 短板的长度才是真正的高a = right - lefts = a * hmax_water = max(max_water,s)# 舍去短板if height[left] <= height[right]:left += 1else:right -=1return max_water

(3)复杂度分析

时间复杂度: O ( n ) O(n) O(n):双指针需要遍历一遍底边长度也就是height的大小n
空间复杂度: O ( 1 ) O(1) O(1):使用的都是常数,没有新建数组

LC704二分查找 easy

题目描述

给定一个长度为 n n n的数组 nums ,元素按从小到大的顺序排列且不重复。请查找并返回元素 target 在该数组中的索引。若数组不包含该元素,则返回-1。

方法:二分查找法

###(1)思路
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
流程:
在这里插入图片描述

(2)python代码

def binary_search(nums: list[int], target: int) -> int:"""二分查找(双闭区间)"""# 初始化双闭区间 [0, n-1] ,即 i, j 分别指向数组首元素、尾元素i, j = 0, len(nums) - 1# 循环,当搜索区间为空时跳出(当 i > j 时为空)while i <= j:# 理论上 Python 的数字可以无限大(取决于内存大小),无须考虑大数越界问题m = (i + j) // 2  # 计算中点索引 mif nums[m] < target:i = m + 1  # 此情况说明 target 在区间 [m+1, j] 中elif nums[m] > target:j = m - 1  # 此情况说明 target 在区间 [i, m-1] 中else:return m  # 找到目标元素,返回其索引return -1  # 未找到目标元素,返回 -1

(3)复杂度分析

时间复杂度: O ( l o g n ) O(logn) O(logn)每次循环区间减少一半,因此循环次数是 O ( l o g n ) O(logn) O(logn)
空间复杂度: O ( 1 ) O(1) O(1)没用使用数组啥的

(4)说明

上述这种方法是是双闭区间的类型 i = 0 , j = n − 1 i=0,j=n-1 i=0,j=n1),二分查找还有左闭右开区间( i = 0 , j = n i=0,j=n i=0,j=n),这种情况下,当 i = = j i==j i==j时,区间 [ i , j ) [i,j) [i,j)为空
左闭右开区间的Python代码:

def binary_search_lcro(nums: list[int], target: int) -> int:"""二分查找(左闭右开区间)"""# 初始化左闭右开区间 [0, n) ,即 i, j 分别指向数组首元素、尾元素+1i, j = 0, len(nums)# 循环,当搜索区间为空时跳出(当 i = j 时为空)while i < j:m = (i + j) // 2  # 计算中点索引 mif nums[m] < target:i = m + 1  # 此情况说明 target 在区间 [m+1, j) 中elif nums[m] > target:j = m  # 此情况说明 target 在区间 [i, m) 中else:return m  # 找到目标元素,返回其索引return -1  # 未找到目标元素,返回 -1

在这里插入图片描述

LC35 搜索插入位置 easy (二分查找法变种问题)

问题描述

LC704:给定一个长度为 n n n的数组 nums ,元素按从小到大的顺序排列且不重复。请查找并返回元素 target 在该数组中的索引。若数组不包含该元素,则返回-1。

LC35:给定一个长度为 n n n的数组 nums ,元素按从小到大的顺序排列且不重复。给一个元素target,想要插入到nums中,并保持有序性。如果数组中存在target,就将targat插入到左侧;如果不存在,将target插入到按顺序插入的位置,返回索引。
在这里插入图片描述

方法:二分查找

(1)思路

⭐️思考:
Q1: 当数组中有target的时候,插入点的索引是否就是返回值?
回答: yep!当查找到原数组有target值时,新的target要放在老的target的左侧,也就是说新的target代替了老的target的位置,也就是插入点的索引就是新插入的target的索引
**Q2:**当数组不存在target的时候,新插入点是哪个元素的索引?
在这里插入图片描述
剩下思路和二分查找一致

(2)python

def binary_search_insertion_simple(nums: list[int], target: int) -> int:"""二分查找插入点(无重复元素)闭区间"""i, j = 0, len(nums) - 1  # 初始化双闭区间 [0, n-1]while i <= j:m = (i + j) // 2  # 计算中点索引 mif nums[m] < target:i = m + 1  # target 在区间 [m+1, j] 中elif nums[m] > target:j = m - 1  # target 在区间 [i, m-1] 中else:return m  # 找到 target ,返回插入点 m# 未找到 target ,返回插入点 ireturn i

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

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

相关文章

轻松管理文件:一键批量导出位置与名称至表格

在数字化时代&#xff0c;我们每天都在与大量的文件打交道。从工作文档到个人照片&#xff0c;从研究报告到会议记录&#xff0c;管理这些文件成为了一项挑战。为了帮助您轻松应对这一挑战&#xff0c;我们推出了一项新功能——批量导出文件位置与名称至表格&#xff01;让您的…

RT-L2KS可调型漏电继电器 电压220V 动作电流30-500mA 动作时间0.2S JOSEF约瑟

RT-L系列可调型漏电继电器 系列型号&#xff1a; RT-L1K可调型漏电继电器 RT-L2K可调型漏电继电器 RT-L3K可调型漏电继电器 RT-L4K可调型漏电继电器 RT-L1KS可调型漏电继电器 RT-L2KS可调型漏电继电器 RT-L3KS可调型漏电继电器 RT-L4KS可调型漏电继电器 RT-L1K;RT-L2K漏电继电…

Day43-2-企业级实时复制intofy介绍及实践

Day43-2-企业级实时复制intofy介绍及实践 1. 企业级备份方案介绍1.1 利用定时方式&#xff0c;实现周期备份重要数据信息。1.2 实时数据备份方案1.3 实时复制环境准备1.4 实时复制软件介绍1.5 实时复制inotify机制介绍1.6 项目部署实施1.6.1 部署环境准备1.6.2 检查Linux系统支…

Ubuntu20下C/C++编程开启TCP KeepAlive

1、在linux下&#xff0c;测试tcp保活&#xff0c;可以使用tcp自带keepalive功能。 2、几个重要参数&#xff1a; tcp_keepalive_time&#xff1a;对端在指定时间内没有数据传输&#xff0c;则向对端发送一个keepalive packet&#xff0c;单位&#xff1a;秒 tcp_keep…

SpringBoot高级

1.自动配置-Condition Condition是Spring4.0后引入的条件化配置接口&#xff0c;通过实现Condition接口可以完成有条件的加载相应的Bean 进入 SpringBoot 启动类&#xff0c;点击进入 run() 可以看到这个方法是有返回值的&#xff0c;返回值为 ConfigurableApplicationConte…

ctype.h的了解string.h库函数中各个函数的使用和模拟实现

目录 字符分类函数 函数讲解 使用样例 字符转换函数 函数讲解 使用样例 strlen的使用和模拟实现 strlen的使用 strlen的模拟实现 计数器 递归&#xff08;不创建临时变量&#xff09; 指针-指针 strcpy的使用和模拟实现 strcpy的使用 strcpy的模拟实现 strca…

深入浅出落地应用分析:AI数字人「微软小冰」

hi,各位,今天要聊的是AI小冰,机缘巧合,投递了这家公司的产品,正好最近在看数字人相关的,就详细剖析下这款产品! 前言 小冰,全称为北京红棉小冰科技有限公司,前身为微软(亚洲)互联网工程院人工智能小冰团队,是微软全球最大的人工智能独立产品研发团队。作为微软全…

GaN HEMTs在电力电子应用中的交叉耦合与基板电容分析与建模

来源&#xff1a;Analysis and Modeling of Cross-Coupling and Substrate Capacitances in GaN HEMTs for Power-Electronic Applications&#xff08; TED 17年&#xff09; 摘要 本文提出了一种考虑了基板电容与场板之间交叉耦合效应的场板AlGaN/GaN高电子迁移率晶体管(HE…

机器学习-04-分类算法-03KNN算法

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中分类算法&#xff0c;本篇为分类算法与knn算法部分。 本门课程的目标 完成一个特定行业的算法应用全过程&#xff1a; 懂业务会选择合适的算法数据处理算法训练算法调优算法融合 算法评估持续调优工程化…

在Vue中使用wangeditor创建富文本编辑器的完整指南

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

计算机考研|王道四本书够吗?

如果你是跨考生&#xff0c;王道的四本书只能覆盖你需要的80% 如果你是计算机专业的考生&#xff0c;王道四本书可以覆盖你需要的90% 我已经说的很明显了&#xff0c;王道的内容覆盖不了408考研的全部大纲&#xff0c;有的知识点虽然在王道书上提到了&#xff0c;但是因为不是…

京东云,华为,格行随身wifi大对比,2024最值得购买的随身WiFi

最近关于随身wifi的话题热度不降&#xff0c;京东自主品牌京东云随身wifi一经推出&#xff0c;很多网友纷纷想体验一下&#xff0c;更有网友直呼碾压老大哥华为随身wifi&#xff0c;一起来看一下京东云随身wifi到底怎么样&#xff1f; 京东云随身wifi是京东自主品牌&#xff0…