LeetCode中等题合集 python

news2024/11/28 8:30:39

目录

  • 3. 无重复字符的最长子串
  • 53. 最大子数组和
  • 80. 删除有序数组中的重复项 II
  • 442. 数组中重复的数据
  • 209. 长度最小的子数组
  • 59. 螺旋矩阵 II
  • 24. 两两交换链表中的节点
  • 19. 删除链表的倒数第 N 个结点
  • 142. 环形链表 II

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

滑动窗口,类似的题目还有绳子覆盖最多的点数
在这里插入图片描述

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        # 滑动窗口问题
        l,r = 0,0 # 定义窗口的左右边界
        maxn = 0 # 记录最大值

        while l <= len(s)-1: # 左边界可以一直试到最后一个位置
            while (r+1 <= len(s)-1) and (s[r+1] not in s[l:r+1]): # r的增加不能超过右边界
                r+=1

            # 右边界停留在了合适的位置上,计算一下当前的长度吧
            if r-l+1 > maxn:
                maxn = r-l+1

            l+=1 # 左边界滑动一格
            
        return maxn

53. 最大子数组和

动态规划,解题思路看我的这篇博客

class Solution:
    def maxSubArray(self, nums: List[int]) -> int:

        # 记录最大和
        max_sum = nums[0]  #边界就是0号元素
        # 直接用一个变量记录一下前边算出来的值,因为每个位置上只和前一个元素有关,省去dp数组
        dp_cur = nums[0] #0号元素没法往前扩,只有一种选择,就是它自己就是累加和

        for i in range(1, len(nums)):
            dp_cur = max(dp_cur+nums[i], nums[i]) #”前边算出来的dp值+自身值“和”自身值“比大小
            max_sum = max(max_sum, dp_cur)

        return max_sum

80. 删除有序数组中的重复项 II

每个数需要和结果集中倒数第二个判断是否相等,是这题的解题关键,因为题目说允许两个数重复。

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:

        if len(nums)<=2:
            return len(nums)

        """
        #只管遍历数组即可,遇到合适的数就往前放(赋值),不合适的就不管这个数了
        #那么前边就形成了一个好的结果集。
        #往前放的时候不用担心,我们会设置一个变量在结果集尾,严格把控人员的进入
        """
        
        # 设置一个看门的变量,前两个元素一定没问题,所以当前的队尾下标就是1
        index = 1
        
        # 查看数组中的每个元素(从第三个元素开始看就行),看能不能放行
        for i in range(2, len(nums)):
            if nums[i] != nums[index-1]: #当前数和结果集中倒数第二个数比较一下  
                nums[index+1] = nums[i]
                index+=1
            
        return index+1

442. 数组中重复的数据

这个题应该属于偏怪的技巧解题吧~~利用数值本身和索引之间的对应关系

class Solution:
    def findDuplicates(self, nums: List[int]) -> List[int]:

        """
        由于数组中的数是有固定范围的,可以对应映射到下标索引上。
        那我们就可以通过操作下标索引位置的那个数,来折射出我们的需求
        """
        
        # 存放找到的结果
        res = []

        # 遍历数组中的每个数
        for num in nums:
            index = abs(num)-1 #这个数的索引

            #找到那个数nums[index]看一下
            if nums[index] < 0: #说明之前有人访问过它了
                res.append(abs(num)) #它不行,它是重复数
            else: #第一次访问
                nums[index] *= -1 #变成负数

        return res

209. 长度最小的子数组

import math
class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:

        # 想象成一个队列比较好理解    
        # 左边不需要一个一个往右扩,因为已经算过这一段的和了。
        # 左边挨个削掉数,只需要减一下就算出来新的和了,不需要再重新累加,不断的削减就行
        
        # 只需要定义几个全局变量就够了
        left,right=0,0
        curSum=0
        minLength = 2*len(nums) # 表示一个很大的数

        while right<len(nums):  # 右边可以一直扩展
            curSum+=nums[right] #往里放就行
            right+=1 #右边界准备要放的下一个元素

            # 只要变了我就判断一下当前的和
            while curSum>=target:
                minLength = right-left if right-left<minLength else minLength

                curSum-=nums[left] # 左边削减
                left+=1
        
        return 0 if minLength==2*len(nums) else minLength        

59. 螺旋矩阵 II

定义变量来控制走的边界,要比自己计算每次要走多少步,省事的多
【学习一下python中从大数到小数递减的for循环遍历,如何用range实现】

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:

        # 定义四个边界,边界控制我们要的走墙边的长度
        # 沿着矩阵每走完一个墙边,边界就会压缩一下
        # 这四个边界的值,刚好也能被用来作为访问数组的下标,也就是我们要走的那行/列

        top,bottom,left,right = 0,n-1,0,n-1  #定义边界

        count = 1 #计数
        matrix = [[0 for x in range(n)] for x in range(n)]

        while count <= n**2:
            #沿着上边界右走
            for i in range(left,right+1):
                matrix[top][i] = count
                count += 1
            top += 1 #上边界压缩

            #沿着右边界下走
            for i in range(top,bottom+1):
                matrix[i][right] = count
                count += 1
            right -= 1 #右边界压缩

            #沿着下边界左走
            for i in range(right,left-1,-1): # range(起点,终点,步长)
                matrix[bottom][i] = count
                count += 1
            bottom -= 1 #下边界压缩

            #沿着左边界上走
            for i in range(bottom,top-1,-1):
                matrix[i][left] = count
                count += 1
            left += 1 #左边界压缩

        return matrix

24. 两两交换链表中的节点

在这里插入图片描述

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
        if head==None or head.next==None:
            return head
        else:
            newHead = head.next #这是最终要返回的头
            pre = head
            while pre and pre.next: #保持有两个数
                cur = pre.next
                temp = cur.next

                cur.next = pre #核心语句1

                if temp==None or temp.next==None:
                    pre.next = temp
                    return newHead
                else:
                    pre.next = temp.next #核心语句2
                    
                    #往下走两格,进入到下一个循环
                    pre = temp
            
            return newHead

19. 删除链表的倒数第 N 个结点

在这里插入图片描述

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:

        nullHead = ListNode(0,head)

        # 设立双指针cur、pre,想象两者之间构成一个程度为n的滑块
        # 1、pre先走出n步,cur不动,两者之间的距离是n
        # 2、一起走,当pre到末尾,cur指向的是倒数第n个

        pre = nullHead
        cur = nullHead

        while n: #pre走到了正确的位置上
            pre = pre.next
            n -= 1
        
        while pre.next!=None: #pre到最后一个节点时停止
            pre = pre.next
            cur = cur.next
        
        cur.next = cur.next.next #核心语句

        return nullHead.next #返回第一个实节点

142. 环形链表 II

在这里插入图片描述

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def detectCycle(self, head: Optional[ListNode]) -> Optional[ListNode]:

        # 设置快慢指针,快指针每次走两步,慢指针每次走一步
        fast = head
        slow = head
        
        while fast and fast.next: # 如果是直链,一定会退出while循环的
        
            fast = fast.next.next # 快指针大胆往前走两步
            slow = slow.next # 慢指针走一步
            
            if fast == slow: # 如果他俩相遇了,说明有环
            	#开始模拟,目的是找到环的入口
                index1 = fast #相遇点
                index2 = head #链表起点
                while index1!=index2: #模拟俩人一起走的过程,最终一定会在环入口处相遇
                    index1 = index1.next
                    index2 = index2.next
                return index1
            
        return None

持续更新中……

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

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

相关文章

Biological Psychiatry:利用TMS-EEG识别难治性抑郁症间歇性θ脉冲刺激的神经生理标志物

前言 难治性抑郁症(TRD)是指在经过足够疗程的药物治疗或心理治疗后&#xff0c;症状没有得到改善的重度抑郁。大约有30%的重度抑郁症(MDD)属于难治性抑郁症。重复经颅磁刺激(rTMS)可引起大脑皮层兴奋或抑制性的改变&#xff0c;是TRD的有效干预措施。间歇性θ脉冲刺激(iTBS)一…

ClickHouse 基础

ClickHouse是2016年开源的列式存储数据库&#xff08;DBMS&#xff09;&#xff0c;使用C语言编写&#xff0c;主要用于在线分析处理查询OLAP&#xff0c;能够使用SQL查询实时生成分析数据报告。 一、列式存储 以下面的Tabel为例 IDNameGender1吴彦祖男2刘亦菲女3陈冠希男 …

INT8 中的稀疏性:加速的训练工作流程和NVIDIA TensorRT 最佳实践

INT8 中的稀疏性&#xff1a;加速的训练工作流程和NVIDIA TensorRT 最佳实践 文章目录 INT8 中的稀疏性&#xff1a;加速的训练工作流程和NVIDIA TensorRT 最佳实践结构稀疏量化在 TensorRT 中部署稀疏量化模型的工作流程案例研究&#xff1a;ResNet-34要求第 1 步&#xff1a;…

JDK17新特性 即将成为主流的JDK 深入了解

文章目录 Switch 语句增强优化字符串拼接代码instanceof增强密封类&#xff08;限制继承类&#xff09;ZGC垃圾收集器 对于JDK17比较明显的特性 总结 Switch 语句增强 首先就是简化了Switch语句&#xff1a; 去掉了break及可以直接给返回值赋值。并且再匹配多个值的时候也做了…

AI 导致留学中介文书老师痛失万元月收入?是真的吗?

近日&#xff0c;总部位于伦敦&#xff0c;但在国内多个城市设有分公司的留学服务机构老板张冶告诉在接受记者采访时&#xff0c;他们对留学英国的人士提供的本硕博申请、论文润色、挂科申诉等业务都受到了ChatGPT的影响&#xff0c;甚至有业务线直接萎缩60%以上&#xff0c;有…

【Python】Python系列教程-- Python3 列表(十三)

文章目录 前言访问元组修改元组删除元组元组运算符元组索引&#xff0c;截取元组内置函数关于元组是不可变的 前言 往期回顾&#xff1a; Python系列教程–Python3介绍&#xff08;一&#xff09;Python系列教程–Python3 环境搭建&#xff08;二&#xff09;Python系列教程–…

如何打造高效的IT服务中心

官方网站 www.itilzj.com 文档资料: wenku.itilzj.com 引言 在当今数字时代&#xff0c;IT服务越来越成为企业发展的关键和优势。高效的IT服务中心能够提高员工生产力&#xff0c;改善客户体验&#xff0c;降低IT成本&#xff0c;并为企业数字化转型奠定良好的基础。本文将介绍…

Unity制作二次元卡通渲染角色材质

Unity制作二次元材质角色 大家好&#xff0c;我是阿赵。接下来准备开一个系列&#xff0c;讲一下二次元卡通角色的渲染。   先来看看成品&#xff0c;我从网上下载了著名游戏《罪恶装备》里面的一个角色模型。在没有做材质之前&#xff0c;把贴图赋予上去&#xff0c;给一个U…

3、数据库:Oracle部署 - 系统部署系列文章

Oracle数据库的安装&#xff0c;以前写过一篇&#xff0c;这次将新版的安装再记录一次&#xff0c;让读者能够有所了解&#xff0c;笔者也能够记录下最新版的安装过程。 一、数据库下载&#xff1b; Oracle最新版目前在官网是19c&#xff0c;从下面这个链接进去下载便可。 http…

java的UDP(二)

文章目录 1. DatagramSocket类2. 简单的UDP客户端3. DatagramChannel 1. DatagramSocket类 要收发DatagramPacket&#xff0c;必须打开一个数据报Socket。在java中&#xff0c;数据报Socekt通过DatagramSocekt类创建和访问。服务器Socket需要指定绑定端口&#xff0c;而用户端…

【react框架】结合antd做表单组件的一些心得记录

文章目录 前言功能的实现尽量先看看antd上是否已经提供当一个页面有多个表单组件时&#xff0c;就要优先考虑把值存在状态管理中如果一些表单比较简单且能确保后续不会有功能上的拓展&#xff0c;可以使用业务组件推荐其他的表单库 前言 因为最近在学其他东西&#xff0c;今天…

华中科技大学计算机考研分析

关注我们的微信公众号 姚哥计算机考研 更多详情欢迎咨询 华中科技大学计算机考研招生学院是计算机科学与技术学院、软件学院和网络空间安全学院。目前均已出拟录取名单。 华中科技大学计算机科学与技术学院成立于1997年&#xff0c;其前身是原华中理工大学&#xff08;即华中…

2023智源大会议程公开丨AI开源论坛

6月9日&#xff0c;2023北京智源大会&#xff0c;将邀请这一领域的探索者、实践者、以及关心智能科学的每个人&#xff0c;共同拉开未来舞台的帷幕&#xff0c;你准备好了吗&#xff1f;与会知名嘉宾包括&#xff0c;图灵奖得主Yann LeCun、图灵奖得主Geoffrey Hinton、OpenAI创…

chatgpt赋能python:Python反转字符串——简单易学的编程技巧

Python反转字符串——简单易学的编程技巧 你是否曾经遇到过需要反转字符串的情况&#xff1f;例如&#xff0c;你想把“Hello World”转换成“dlroW olleH”&#xff1f;如果是这样&#xff0c;Python可以帮你完成这个任务。在本文中&#xff0c;我们将看到如何使用Python的简…

C++标准模板库 栈容器的使用

我们知道c标准模板库中栈和队列很重要&#xff0c;是考试的重点内容&#xff0c;今天和我一起来学习栈容器的使用吧 特点&#xff1a;先进后出&#xff0c;后进先出&#xff08;餐馆的盘子&#xff09; C中有专门的栈容器stack 常用 Push(S,x);//入栈 POp(S,x);//出栈 GetT…

判断点在多边形内算法的C++实现

本篇博客介绍了使用射线法判断点在多边形内部还是外部的算法&#xff0c;并通过C做了具体实现 1. 算法思路 判断平面内点是否在多边形内有多种算法&#xff0c;其中射线法是其中比较好理解的一种&#xff0c;而且能够支持凹多边形的情况。该算法的思路很简单&#xff0c;就是…

网络基础(二)- TCP协议

TCP协议 TCP全称为 “传输控制协议(Transmission Control Protocol”)。它最重要的是解决在传输层通信的过程中&#xff0c;解决网络通信过程中可靠性的问题。当然&#xff0c;很多人在理解TCP的时候&#xff0c;往往只知道帮我们解决可靠性&#xff0c;但是&#xff0c;同时呢…

JavaWeb三大组件之一Filter(过滤器)

定义 拦截所有访问web资源的请求或者响应(servlet、Jsp页面、HTML页面)&#xff0c;从而实现我们自己的业务逻辑&#xff0c;这些逻辑可以是实现访问权限的控制、过滤敏感词、压缩响应等功能。 原理 过滤器是"链接"在容器的处理过程中的&#xff0c;它会在servle…

2023 华为 Datacom-HCIE 真题题库 09/12--含解析

单项选择题 1.[试题编号&#xff1a;190485] &#xff08;单选题&#xff09;华为交换机MAC地址表的老化时间默认是多少秒? A、500 B、5 C、300 D、400 答案&#xff1a;C 解析&#xff1a;无 2.[试题编号&#xff1a;190484] &#xff08;单选题&#xff09;如图所示&#…

小伙以1.2万元价格拍下一颗“荔枝王”:要将这颗最好的荔枝送给女友

近日&#xff0c;一则海南海口公益拍卖的新闻引起了网友的热议。 一位小伙子以1.2万元的价格拍下了一颗被誉为“荔枝王”的稀有果实&#xff0c;并表示要将这颗最好的荔枝送给自己的女友。 这个举动引起了一些网友的质疑&#xff0c;有人称赞他的浪漫&#xff0c;也有人质疑他的…