2024.4.26 —— LeetCode 高频题复盘

目录

  • 3. 无重复字符的最长子串
  • 206. 反转链表
  • 146. LRU 缓存
  • 215. 数组中的第K个最大元素
  • 25. K 个一组翻转链表
  • 15. 三数之和
  • 53. 最大子数组和
  • 21. 合并两个有序链表
  • 1. 两数之和
  • 5. 最长回文子串
  • 912. 排序数组

3. 无重复字符的最长子串


题目链接

class Solution:def lengthOfLongestSubstring(self, s: str) -> int:stack=[]max_cnt=0for c in s:while c in stack:stack.pop(0)stack.append(c)if len(stack)>max_cnt:max_cnt=len(stack)return max_cnt

206. 反转链表


题目链接

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:pre=Nonecur=headwhile cur:temp=cur.nextcur.next=prepre=curcur=tempreturn pre

146. LRU 缓存


题目链接

用到的数据结构:哈希表+双向链表

在这里插入图片描述

class ListNode:def __init__(self,key=None,value=None):self.key=keyself.value=valueself.pre=Noneself.next=Noneclass LRUCache:def __init__(self, capacity: int):self.capacity=capacityself.hashmap={}self.head=ListNode()self.tail=ListNode()self.head.next=self.tailself.tail.pre=self.headdef move_to_tail(self,key):node=self.hashmap[key]node.pre.next=node.nextnode.next.pre=node.prenode.next=self.tailnode.pre=self.tail.preself.tail.pre.next=nodeself.tail.pre=nodedef get(self, key: int) -> int:if key in self.hashmap:self.move_to_tail(key)res=self.hashmap.get(key,-1)if res==-1:return reselse:return res.valuedef put(self, key: int, value: int) -> None:if key in self.hashmap:self.hashmap[key].value=valueself.move_to_tail(key)else:if len(self.hashmap)==self.capacity:self.hashmap.pop(self.head.next.key)self.head.next=self.head.next.nextself.head.next.pre=self.headnewNode=ListNode(key,value)self.hashmap[key]=newNodenewNode.next=self.tailnewNode.pre=self.tail.preself.tail.pre.next=newNodeself.tail.pre=newNode# Your LRUCache object will be instantiated and called as such:
# obj = LRUCache(capacity)
# param_1 = obj.get(key)
# obj.put(key,value)

注意:

  • 本题的数据结构:哈希表+双向链表
  • self总是忘记写

215. 数组中的第K个最大元素


题目链接

class Solution:def findKthLargest(self, nums: List[int], k: int) -> int:return self.quickSelect(nums,k)def quickSelect(self,nums,k):pivot=random.choice(nums)big,equal,small=[],[],[]for num in nums:if num > pivot:big.append(num)elif num<pivot:small.append(num)else:equal.append(num)if k<=len(big):return self.quickSelect(big,k)elif k>len(nums)-len(small):return self.quickSelect(small,k-len(nums)+len(small))else:return pivot

25. K 个一组翻转链表


题目链接

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def reverse(self,head):cur=headpre=Nonewhile cur:temp=cur.nextcur.next=prepre=curcur=tempreturn predef reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:dummy=ListNode(next=head)pre,end=dummy,dummywhile end.next:for _ in range(k):if end:end=end.nextif not end:breaktemp=end.nextend.next=Nonestart=pre.nextpre.next=self.reverse(start)start.next=temppre,end=start,startreturn dummy.next

15. 三数之和


题目链接

class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:nums.sort()res=[]n=len(nums)for i in range(n):if nums[i]>0:return resif i>0 and nums[i]==nums[i-1]:continueL=i+1R=n-1while L<R:if nums[i]+nums[L]+nums[R]==0:res.append([nums[i],nums[L],nums[R]])while L<R and nums[L]==nums[L+1]:L+=1while L<R and nums[R]==nums[R-1]:R-=1L+=1R-=1elif nums[i]+nums[L]+nums[R]>0:R-=1else:L+=1return res  

53. 最大子数组和


题目链接

class Solution:def maxSubArray(self, nums: List[int]) -> int:# dp[i]表示nums中下标从0到i的部分,最大的子数组和n=len(nums)if n==1:return nums[0]dp=[0]*ndp[0]=nums[0]for i in range(1,n):if dp[i-1]>0:dp[i]=dp[i-1]+nums[i]else:dp[i]=nums[i]return max(dp)

21. 合并两个有序链表


题目链接

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:if not list1:return list2if not list2:return list1if list1.val<list2.val:list1.next=self.mergeTwoLists(list1.next,list2)return list1else:list2.next=self.mergeTwoLists(list2.next,list1)return list2

1. 两数之和


题目链接

class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:hashmap={}for i,num in enumerate(nums):if target-num in hashmap:return [i,hashmap[target-num]]hashmap[num]=ireturn [] 

5. 最长回文子串


题目链接

class Solution:def longestPalindrome(self, s: str) -> str:n=len(s)dp= [[False]*n for _ in range(n)]begin=0max_len=1for i in range(n-1,-1,-1):for j in range(i,n):if s[i]==s[j] and (j-i<=2 or dp[i+1][j-1]):dp[i][j]=Trueif j-i+1>max_len:max_len=j-i+1begin=ireturn s[begin:begin+max_len]

912. 排序数组


题目链接

  1. 快速排序
class Solution:def sortArray(self, nums: List[int]) -> List[int]:self.quick(nums, 0, len(nums) - 1)return numsdef quick(self, nums, left, right):if left >= right:return nums# 选择一个随机的索引作为pivotpivot_index = random.randint(left, right)# 将随机选择的pivot和最左侧的元素交换nums[left], nums[pivot_index] = nums[pivot_index], nums[left]pivot = nums[left]left0, right0 = left, rightwhile left < right:while left < right and nums[right] >= pivot:right -= 1while left < right and nums[left] <= pivot:left += 1nums[left], nums[right] = nums[right], nums[left]# 恢复pivot到正确的位置nums[left0], nums[left] = nums[left], nums[left0]self.quick(nums, left + 1, right0)self.quick(nums, left0, left - 1)
  1. 归并排序
class Solution:# 合并两个有序数组def merge(self,left,right):merged=[]i=j=0while i<len(left) and j<len(right):if left[i]<=right[j]:merged.append(left[i])i+=1else:merged.append(right[j])j+=1while i<len(left):merged.append(left[i])i+=1while j<len(right):merged.append(right[j])j+=1return merged# 划分左右数组def sortArray(self, nums: List[int]) -> List[int]:if len(nums)<=1:return numsmid=len(nums)//2left=self.sortArray(nums[:mid])right=self.sortArray(nums[mid:])return self.merge(left,right)
  1. 堆排序
class Solution:def adjust(self,nums,parent,length):"""nums:待排序数组parent:父结点的索引length:参与调整的数组长度(结点个数)"""child=parent*2+1while child<length:if child+1<length and nums[child+1]>nums[child]:child+=1if nums[parent]<nums[child]:nums[parent],nums[child]=nums[child],nums[parent]parent=childchild=2*parent+1else:breakdef sortArray(self, nums: List[int]) -> List[int]:# 建立堆结构for i in range(len(nums)//2-1,-1,-1):self.adjust(nums,i,len(nums))for i in range(len(nums)-1,0,-1):nums[0],nums[i]=nums[i],nums[0]self.adjust(nums,0,i)return nums
  1. 冒泡排序
def bubble_sort(lis):n = len(lis)# 控制比较的轮数for j in range(n - 1):count = 0# 控制每一轮的比较次数# -1是为了让数组不要越界# -j是每一轮结束之后, 我们就会少比一个数字for i in range(n - 1 - j):if lis[i] > lis[i + 1]:lis[i], lis[i + 1] = lis[i + 1], lis[i]count += 1# 算法优化# 如果遍历一遍发现没有数字交换,退出循环,说明数列是有序的if count == 0:break

总结:

  • 快速排序、堆排序、归并排序的时间复杂度都是 O(nlogn);
  • 快速排序、堆排序是不稳定的,归并排序、冒泡排序是稳定的。

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

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

相关文章

中伟视界:矿山智能管控平台关键功能介绍,AI算法、告警通知、问题解决

矿山智能管控平台的关键功能介绍如下&#xff1a; 1.1. 主界面功能介绍 主界面分为六大区域&#xff0c;分别是设备列表、重点区域、功能区、告警列表、菜单区等&#xff0c;分别对应不同的功能和操作。 1.2. 平台功能 平台包含11条特色功能&#xff0c;分别为&#xff1a…

《Git---Windows Powershell提交信息中文乱码解决方案》

解释&#xff1a; Windows PowerShell中的Git乱码通常是因为字符编码不正确或Git配置不支持Windows系统的默认编码导致的。Git在处理文件时可能使用UTF-8编码&#xff0c;而Windows系统的命令行工具&#xff08;如PowerShell&#xff09;默认使用的是Windows-1252或GBK编码。 …

场景文本检测识别学习 day06(Vi-Transformer论文精读)

Vi-Transformer论文精读 在NLP领域&#xff0c;基于注意力的Transformer模型使用的非常广泛&#xff0c;但是在计算机视觉领域&#xff0c;注意力更多是和CNN一起使用&#xff0c;或者是单纯将CNN的卷积替换成注意力&#xff0c;但是整体的CNN 架构没有发生改变VIT说明&#x…

Jupyter Notebook 中使用虚拟环境的Python解释器

问题&#xff1a;创建虚拟环境&#xff0c;在pycharm中配置虚拟环境的Python解释器&#xff0c;然后在pycharm中打开ipynb&#xff0c;执行发现缺少包&#xff0c;但是虚拟环境中已经安装了 解决方式&#xff1a; 配置Jupyter Notebook 使用虚拟环境的Python解释器 1&#x…

JWT是什么?如何使用?

JWT是什么&#xff1f;如何使用&#xff1f; 前言什么是JWT&#xff1f;概念工作方式JWT的组成HeaderPayloadSignatrue 实战引入依赖自定义注解定义实体类定义一个JWT工具类业务校验并生成token定义拦截器配置拦截器定义接口方法并添加注解开始验证 使用场景注意事项 JWT与传统…

用大模型生成带文字的海报

本文代码讲整合在&#xff1a; GitHub - liangwq/Chatglm_lora_multi-gpu: chatglm多gpu用deepspeed和 这篇文章介绍如何利用VLMdiffusion模型来搭建一条文本生成海报的链路。搭建这条链路有两个应用&#xff1a;1.实际的业务中需要批量生产文字图海报可以用&#xff0c;2.可以…

生成式人工智能(AIGC)教学解决方案

一、前言 近年来&#xff0c;伴随计算能力跃升和数据量指数级增长&#xff0c;以多模态巨型模型为典型代表的生成式AI技术&#xff0c;在全球范围内引起了广泛关注与热烈追捧。在教育、医疗、法律等众多专业领域&#xff0c;生成式人工智能技术的影响力日益凸显&#xff0c;尤…

C++11 设计模式5. 原型模式

什么是原型模式&#xff1f; 原型模式⼀种创建型设计模式&#xff0c;该模式的核⼼思想是基于现有的对象创建新的对象&#xff0c;⽽不是从头开始创建。在原型模式中&#xff0c;通常有⼀个原型对象&#xff0c;它被⽤作创建新对象的模板。新对象通过复制原型对象的属性和状态来…

24.什么是跨域?解决方案有哪些?

为什么会出现跨域问题 存在浏览器同源策略&#xff0c;所以才会有跨域问题。那么浏览器是出于何种原因会有跨域的限制呢。其实不难想到&#xff0c;跨域限制主要的目的就是为了用户的上网安全。 同源策略导致的跨域是浏览器单方面拒绝响应数据&#xff0c;服务器端是处理完毕…

opencv基础篇 ——(十)非真实感渲染

非真实感渲染&#xff08;Non-Photorealistic Rendering, NPR&#xff09;是指通过一系列图像处理技术&#xff0c;将真实感图像转换为具有特定艺术风格或视觉效果的图像&#xff0c;模拟绘画、素描、卡通等非现实主义表现手法。OpenCV 提供了一些内置函数来实现非真实感渲染&a…

2024最新的,免费的 ChatGPT 网站AI(八个)

ChatGPT是美国人工智能研究实验室OpenAI在2022年11月推出的一款人工智能技术驱动的语言模型应用。它基于GPT-3.5架构&#xff08;后续还有GPT-4架构的升级版&#xff09;构建&#xff0c;拥有强大的自然语言处理能力和上下文理解能力&#xff0c;能够参与多轮对话&#xff0c;为…

Python_GUI工具包 PyQt 与 Pyside6的介绍

Python_GUI工具包 PyQt 与 Pyside6的介绍 一、简介 在Python的GUI&#xff08;图形用户界面&#xff09;开发领域&#xff0c;PyQt和PySide6是两个非常重要的工具包。它们都基于Qt库&#xff0c;为Python开发者提供了丰富的GUI组件和强大的功能。当然Python也有一些其他的GU…

Halcon 检测物体定位点

文章目录 get_domain 返回所有输入图像的定义域作为一个区域add_channels 给区域增加灰度值find_shape_model 发现匹配模板find_shape_models 发现最佳模板示例 get_domain 返回所有输入图像的定义域作为一个区域 Halcon 中的区域 get_domain(Image : Domain : : ) Image : …

SpringBoot之自定义注解参数校验

SpringBoot之自定义注解参数校验 为什么要自定义注解 我这里先引入一个例子&#xff0c;就比如我现在要写文章&#xff0c;文章也许写完正要发布&#xff0c;也可以是还没写完正要存草稿&#xff0c;前端往后端发送数据&#xff0c;如果前端的state不是草稿或者已发布状态&…

大模型应用开发极简入门

简单的归纳一下书的前序部分 目录 LLM&#xff08;Large Language Model&#xff09;的应用技术栈通常包括以下几个方面&#xff1a; 深度学习框架&#xff1a; 数据预处理工具&#xff1a; 训练资源&#xff1a; 模型优化和调参工具&#xff1a; 部署和应用集成&#xf…

智慧图书管理|基于SSM+vue的网上服装商城系统(源码+数据库+文档)

智慧图书管理目录 基于SSMvue的网上服装商城系统 一、前言 二、系统设计 三、系统功能设计 1.1 服装列表 1.2 公告信息管理 1.3 公告类型管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1…

linus下Anaconda创建虚拟环境pytorch

一、虚拟环境 1.创建 输入下面命令 conda create -n env_name python3.8 输入y 2.激活环境 输入 conda activate env_name 二、一些常用的命令 在Linux的控制平台 切换到当前的文件夹 cd /根目录/次目录 查看conda目录 conda list 查看pip目录 pip list查看历史命…

Python 爬虫如何配置代理 IP (Py 采集)

在Python中配置代理IP&#xff0c;可以通过设置requests库的proxies参数来实现。以下是一个示例&#xff1a; import requests# 则立可以获取稳定代理Ip&#xff1a;https://www.kuaidaili.com/?refrg3jlsko0ymg # 推荐使用私密动态 IP proxies {"http": "ht…

芒果超媒财报解读:科技加持下,如何蜕变为内容“全科生”?

在降本增效和内容为王的基调下&#xff0c;国内头部长视频平台正在拥抱增长。 爱奇艺率先公布2023年财务数据&#xff0c;实现归母净利润19.25亿元&#xff0c;与2022年亏损1.36亿元相比&#xff0c;扭亏为盈且增幅显著。 而近日&#xff0c;随着新一季《浪姐》播出&#xff…

JAVA面试题分享---多线程与线程池

多线程 什么是线程?线程和进程的区别?&#xff08;了解&#xff09; 线程&#xff1a;是进程的一个实体&#xff0c;是 cpu 调度和分派的基本单位&#xff0c;是比进程更小的 可以独立运行的基本单位。 进程&#xff1a;具有一定独立功能的程序关于某个数据集合上的一次运…