力扣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.mzph.cn/news/749126.shtml

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

相关文章

C++三级2021考题

我家的门牌号 #include<bits/stdc.h> using namespace std; int n,m,sum0; int a[100]; void f(int); int x(int); int main() {int s;cin>>n;for(int i1;true;i){s(1i)*i/2;for(int j1;j<i;j){if(s-2*jn){cout<<j<<i;return 0;}}}return 0; } voi…

柚见第十二期(随机匹配)

随机匹配 目的 为了帮大家更快地发现和自己兴趣相同的朋友 问题 匹配 1 个还是匹配多个&#xff1f; 答&#xff1a;匹配多个&#xff0c;并且按照匹配的相似度从高到低排序 怎么匹配&#xff1f;&#xff08;根据什么匹配&#xff09; 答&#xff1a;标签 tags 还可以根据 us…

分享一下自己总结的7万多字java面试笔记和一些面试视频,简历啥的,已大厂上岸

分享一下自己总结的7万多字java面试笔记和一些面试视频&#xff0c;简历啥的&#xff0c;已大厂上岸 自己总结的面试简历资料&#xff1a;https://pan.quark.cn/s/8b602fe53b58 文章目录 SSMspringspring 的优点&#xff1f;IoC和AOP的理解**Bean 的生命周期****列举一些重要…

20个最佳ChatGPT创业提示

20 Best ChatGPT Prompts for Start-Ups 在初创企业不断变化的生态系统中&#xff0c;利用像 ChatGPT 这样的尖端工具可以成为改变游戏规则的因素。初创企业以其敏捷性和创新性而闻名&#xff0c;总是在寻找提高效率、创造力和竞争力的方法。ChatGPT 凭借其先进的功能&#xf…

leetcode2684--矩阵中移动的最大次数

1. 题意 矩阵中一个位置只能从左上一、左、左下一格子转移而来&#xff0c;且当前值一定大于转移之前的值&#xff1b; 求从第一列开始的最大转移步数。 矩阵中移动的最大次数 2. 题解 思路 由于状态只能从左向右转移&#xff0c;所以同一个位置被搜索到后&#xff0c;第一…

一命通关差分

本章节是前缀和的延申 一命通关前缀和-CSDN博客https://blog.csdn.net/qq_74260823/article/details/136530291?spm1001.2014.3001.5501 一命通关前缀和 公交车 引入 还是利用我们在前缀和中所采用的例子——公交车。 有一辆公交车&#xff0c;一共上下了N批乘客&#xff1a…

【Vue3】源码解析-Runtime

文章目录 系列文章packages/runtime-dom/src/index.ts初始化创建renderermount \src\runtime-core\component.jsh.tspackages/runtime-core/src/renderer.ts挂载及卸载DOM节点render packages/runtime-dom/src/nodeOps.tspackages/runtime-core/src/apiCreateApp.ts创建appmoun…

前端UNIAPP端webview嵌入H5使用说明文档

一、关闭webView窗口 plus.webview.close( id_wvobj, aniClose, duration, extras ); 功能说明 关闭已经打开的Webview窗口&#xff0c;需先获取窗口对象或窗口id&#xff0c;并可指定关闭窗口的动画及动画持续时间。 参数说明 参数是否必须参数类型/固定值说明id_wvobj是…

GPT-3后的下一步:大型语言模型的未来方向

摘要&#xff1a; 本文将概述GPT-3后的下一步&#xff1a;大型语言模型的未来方向&#xff0c;包括技术发展趋势、应用场景、挑战与机遇。 引言&#xff1a; GPT-3是OpenAI于2020年发布的一款大型语言模型&#xff0c;它在自然语言处理领域取得了突破性进展。GPT-3的出现标志…

全国农产品价格分析预测可视化系统设计与实现

全国农产品价格分析预测可视化系统设计与实现 【摘要】在当今信息化社会&#xff0c;数据的可视化已成为决策和分析的重要工具。尤其是在农业领域&#xff0c;了解和预测农产品价格趋势对于农民、政府和相关企业都至关重要。为了满足这一需求&#xff0c;设计并实现了全国农产…

RabbitMQ 面试题及答案整理,最新面试题

RabbitMQ的核心组件有哪些&#xff1f; RabbitMQ的核心组件包括&#xff1a; 1、生产者&#xff08;Producer&#xff09;&#xff1a; 生产者是发送消息到RabbitMQ的应用程序。 2、消费者&#xff08;Consumer&#xff09;&#xff1a; 消费者是接收RabbitMQ消息的应用程序…

哥斯拉流量webshell分析-->ASP/PHP

哥斯拉流量webshell分析 哥斯拉是继菜刀、蚁剑、冰蝎之后的又一个webshell利器&#xff0c;这里就不过多介绍了。 哥斯拉GitHub地址&#xff1a;https://github.com/BeichenDream/Godzilla 很多一线师傅不太了解其中的加解密手法&#xff0c;无法进行解密&#xff0c;这篇文章…

Vue.js基础

表单输入绑定 基础用法 v-model 指令在表单 <input>、<textarea>及 <select> 元素上创建双向数据绑定。 v-model 本质上不过是语法糖。它负责监听用户的输入事件以更新数据&#xff0c;并对一些极端场景进行一些特殊处理。 vue 模板语法包括两大类 插值语法…

Java算法之数论基础

Java算法之数论基础 一、最大公约数&#xff08;Greatest Common Divisor, GCD&#xff09; 在Java中&#xff0c;我们可以使用欧几里得算法&#xff08;辗转相除法&#xff09;来求两个数的最大公约数&#xff1a; 辗转相除法&#xff08;欧几里得算法&#xff09; 辗转相…

会议室预约系统优化(蓝桥杯)

文章目录 会议室预约系统优化问题描述差分 会议室预约系统优化 问题描述 假设你是一家大型企业的 IT 工程师&#xff0c;企业内有 n 个会议室&#xff0c;每天都有多个部门预约会议室进行会议。你的任务是优化现有的会议室预约系统。 你需要设计一个程序来支持以下两种操作…

Web3社交项目UXLINK零撸教程

简介&#xff1a;UXLINK是Web3行业中首个主打双向、熟人社交关系的产品&#xff0c;与其他社交基础设施类项目相比&#xff0c;类似Twitter Vs Facebook、微博 Vs 微信的社交结构区别。UXLINK的愿景&#xff1a;1、社交中心&#xff1a;成为最大的社交平台&#xff0c;专注于真…

goctl-swagger 生成json接口文件

参考&#xff1a; GitHub - dyntrait/goctl-swagger: 通过 api 文件生成 swagger 文档 GitHub - Bluettipower/goctl-swagger 一:编译 执行go install 前一般需要设置环境&#xff0c;不然资源经常会下载不下载 go env -w GOPROXYhttps://goproxy.cn,direct 执行完 go in…

C++/CLI学习笔记4(快速打通c++与c#相互调用的桥梁)

3.4声明多个变量 同一个语句可声明同类型的多个变量&#xff0c;用逗号分隔即可&#xff0c;如下所示:int x 10, y, z 11; 该语句声明int变量x,y和z。第一个初始化为10&#xff0c;第二个未初始化&#xff0c;第三个初始化为11。 3.5变量赋值 使用赋值操作符(等号)向变量…

IO流(主要是记住四大类InputStream,OutputStream、Reader和Writer,其他都是他们的子类)

IO流 1、文件 &#xff08;1&#xff09;文件概念 文件就是保存数据的地方。例如word文档&#xff0c;txt文件&#xff0c;execl文件等等。 &#xff08;2&#xff09;文件流 文件在程序中是以流的形式来操作的。 流&#xff1a;数据在数据源&#xff08;文件&#xff09;…

【Python】Python中的正则表达式

Python中的正则表达式 1.re模块使用入门 1.1 re.match 函数 函数定义&#xff1a; re.match 尝试从字符串的起始位置匹配一个模式&#xff0c;如果不是起始位置匹配成功的话&#xff0c;match() 就返回 none。 函数语法&#xff1a; re.match(pattern, string, flags0) …