LeetCode刷题记录(Python3)——线性表

2023-05-16

  1. LeetCode27——移除元素【简单】

问题描述:给定一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,必须仅使用 O(1) 额外空间并原地修改输入数组。

双指针法:

class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        n = len(nums)
        left = 0
        right = 0
        while right < n:
            if nums[right] != val:
                nums[left] = nums[right]
                left += 1
            right += 1
        return left
  1. LeetCode26——删除排序数组中的重复项【简单】

问题描述:给你一个 升序排列 的数组 nums ,请原地删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。元素的相对顺序应该保持一致。必须将结果放在数组nums的第一部分,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。不要使用额外的空间,必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

双指针法:

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        n = len(nums)
        if n == 0:
            return None
        left = 1
        right = 1
        while right < n:
            if nums[right] != nums[right - 1]:
                nums[left] = nums[right]
                left += 1
            right += 1
        return left
  1. LeetCode80——删除有序数组中的重复项 II【中等】

问题描述:给你一个有序数组 nums ,请你原地删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

双指针法:

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        n = len(nums)
        if n <= 2:
            return n
        left = 1
        right = 1
        count = 1
        while right < n:
            if nums[right] != nums[right - 1]:
                nums[left] = nums[right]
                left += 1
                count = 1
            else:
                count += 1
                if count <= 2:
                    nums[left] = nums[right]
                    left += 1
            right += 1
        return left
  1. LeetCode4——寻找两个正序数组的中位数【困难】

问题描述:给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log (m+n)) 。

转化为查找第K小的元素:

class Solution:
    def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
        m = len(nums1)
        n = len(nums2)
        if (m + n) % 2 == 1:
            return self.findKthElement(nums1, nums2, (m + n + 1) // 2)
        else:
            return (self.findKthElement(nums1, nums2, (m + n )//2) + self.findKthElement(nums1, nums2, (m + n )//2 + 1)) / 2.0

    def findKthElement(self, nums1, nums2, k):
        m = len(nums1)
        n = len(nums2) 
        idx1 = 0
        idx2 = 0
        while True:
            if idx1 == m:
                return nums2[idx2 + k - 1]
            if idx2 == n:
                return nums1[idx1 + k - 1]
            if k == 1:
                return min(nums1[idx1], nums2[idx2])
            newIdx1 = min(idx1 + k // 2 - 1, m - 1)
            newIdx2 = min(idx2 + k // 2 - 1, n - 1)
            if nums1[newIdx1] <= nums2[newIdx2]:
                k -= newIdx1 - idx1 + 1
                idx1 = newIdx1 + 1
            else:
                k -= newIdx2 - idx2 + 1
                idx2 = newIdx2 + 1
  1. LeetCode21——合并两个有序链表【简单】

问题描述:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

# 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 list2
        if not list2:
            return list1
        
        while list1 and list2:
            if list1.val <= list2.val:
                list1.next = self.mergeTwoLists(list1.next, list2)
                return list1
            else:
                list2.next = self.mergeTwoLists(list1, list2.next)
                return list2
  1. LeetCode83——删除排序链表中的重复元素【简单】

问题描述:给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def deleteDuplicates(self, head: Optional[ListNode]) -> Optional[ListNode]:
        ans = head
        if not head:
            return None
        while head.next:
            if head.val == head.next.val:
                if head.next.next:
                    head.next = head.next.next
                else:
                    head.next = None
            else:
                head = head.next
        return ans
  1. LeetCode203——移除链表元素【简单】

问题描述:给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
        ans = head
        if not head:
            return None
        while head.next:
            if head.next.val == val:
                if head.next.next:
                    head.next = head.next.next
                else:
                    head.next = None
            else:
                head = head.next
        
        # 判断头节点是否等于val
        if ans.val == val:
            return ans.next
        else:
            return ans
  1. LeetCode19——删除链表的倒数第 N 个结点【中等】

问题描述:给你一个链表,删除链表的倒数第 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]:
        length = 0
        temp = head
        while temp:
            length += 1
            temp = temp.next
        
        if length == 0:
            return None
        if length - n == 0:
            return head.next
        temp = head
        for i in range(length - n - 1):
            temp = temp.next
        if temp.next.next:
            temp.next = temp.next.next
        else:
            temp.next = None
        return head
  1. LeetCode234——回文链表【简单】

问题描述:给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def isPalindrome(self, head: Optional[ListNode]) -> bool:
        invertedList = ListNode(val=head.val)
        temp = head
        while temp.next:
            newNode = ListNode(val = temp.next.val)
            newNode.next = invertedList
            invertedList = newNode
            temp = temp.next
        while head:
            if head.val != invertedList.val:
                return False
            head = head.next
            invertedList = invertedList.next
        return True
  1. LeetCode61——旋转链表【中等】

问题描述:给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def rotateRight(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
        length = 0
        temp = head
        while temp:
            length += 1
            temp = temp.next
        if length <= 1:
            return head
        for i in range(k % length):
            head = self.rotate(head)
        return head
    
    def rotate(self, root):
        temp = root
        while temp.next.next:
            temp = temp.next
        ans = ListNode(val=temp.next.val)
        temp.next = None
        ans.next = root
        root = ans
        return root

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode刷题记录(Python3)——线性表 的相关文章

  • kubernetes_Kubernetes手册

    kubernetes Kubernetes is an open source container orchestration platform that automates the deployment management scalin
  • 设置成功的开源计划办公室(OSPO)的指南

    公司创建了开放源代码计划办公室 xff08 OSPO xff09 xff0c 以管理其与所依赖的开放源代码生态系统的关系 通过了解公司的开源生态系统 xff0c OSPO可以最大化公司的投资回报率 xff0c 并降低使用 xff0c 贡献和
  • 开源搜索引擎 种子搜索_使用开源搜索引擎自定义您的互联网

    开源搜索引擎 种子搜索 很久以前 xff0c 互联网很小 xff0c 只有几个人可以将它们编入索引 xff0c 这些人收集了所有网站的名称和位置 xff0c 并按页面或印刷书籍中的主题列出了它们 随着万维网网络的发展 xff0c 网络响动
  • 开源 apm_使用开源APM软件:InspectIT

    开源 apm 在当今时代 xff0c 软件系统不断变得越来越复杂 同时 xff0c 客户对响应时间和可用性的期望比以往更高 如您所知 xff0c 性能不佳的服务可能会将客户吸引到竞争对手的产品中 因此 xff0c 系统故障和性能不佳通常会对
  • 啦啦啦啦啦_开放组织读书俱乐部:啦啦队长如何设定方向

    啦啦啦啦啦 我们终于进入了为期7周的开放式组织虚拟图书俱乐部的第7章 xff0c 催化方向 在前几周 xff0c 我们讨论了开放组织的原因和方式 与启动上周的包容性决策的讨论 xff0c 我们一头扎进了 自下而上 的组织模式是什么成分 现在
  • cisco路由器vty_如何使用VTY Shell配置路由器

    cisco路由器vty 最近 xff0c 我写了一篇文章 xff0c 解释了如何使用Quagga路由套件实现开放式最短路径优先 xff08 OSPF xff09 可以使用多个软件套件代替Quagga来实现不同的路由协议 一种这样的选择是自由
  • powerdns_使用PowerDNS为名称服务器轻松配置DNS

    powerdns 几个月前 xff0c 我们要求为新项目提供稳定可靠的域名系统 xff08 DNS xff09 服务器 该项目使用容器进行自动部署 xff0c 每个新环境将在其中生成唯一的随机URL 在对可能的解决方案进行了大量研究之后 x
  • 人工智能革命(下):永生还是毁灭

    导读 xff1a 本系列文章讲述了人工智能革命的爆发以及人类未来的出路 xff0c 由于篇幅较长分为上下两篇 xff0c 原英文载于神奇的网站 WaitButWhy com xff0c 作者Tim Urban还写过一篇有关脑机接口的文章 N
  • rust vs java_为什么我喜欢以Java程序员的身份学习Rust

    rust vs java 自从我正确地学习了计算机或人类这门新语言以来 xff0c 已经很长时间了 也许25年 那是Java语言 xff0c 尽管与此同时我不得不写一点点C xff08 很少 xff09 和JavaScript xff0c
  • git-cola使用教程_使用Git Cola轻松实现Git

    git cola使用教程 Git是一个Linux命令 xff0c 可帮助您管理工作的版本 它已被移植到BSD xff0c macOS xff0c Windows等 它是流行的代码托管服务的基础 xff0c 包括GitLab和NotABug等
  • .net 开发使用什么语言_如何开始使用.NET开发

    net 开发使用什么语言 NET框架由Microsoft在2000年发布 该平台的开源实现Mono在2000年代初一直是争议的中心 xff0c 因为Microsoft拥有 NET技术的多项专利 xff0c 并且可以使用这些专利终止Mono的
  • linux重启命令_3条命令重启Linux(另外4种安全方式)

    linux重启命令 Linux完全有能力运行 xff0c 而不需要数周 xff0c 而是数年 xff0c 而无需重新启动 在某些行业中 xff0c 这正是Linux的功能 xff0c 这要归功于kpatch和kgraph之类的进步 但是 x
  • crazy pony_Pony编程语言简介

    crazy pony 在Wallaroo Labs xff08 我是工程副总裁 xff09 xff0c 我们正在构建以Pony编程语言编写的高性能 xff0c 分布式流处理器 大多数人都没有听说过Pony xff0c 但是对于Wallaro
  • html标记语言图像标记_为什么我喜欢这些标记语言

    html标记语言图像标记 去年大约这个时候 xff0c 我为本专栏文章简要介绍了各种标记语言 语言选择的话题最近出现了好几次 xff0c 所以我认为现在该是时候以我的偏见来重新讨论这个话题了 我在这里解释为什么我更喜欢我的语言 xff0c
  • 无人机开源项目_8个开源无人机项目

    无人机开源项目 编者注 xff1a 本文最初发表于2016年12月 xff0c 现已更新以包含其他信息 在过去的几年中 xff0c 对民用 xff0c 军事和商用无人机的兴趣Swift增长 xff0c 这也带动了制造商社区对开源无人机项目的
  • 开源协议 自主发展_开源推动科学发展的9个故事

    开源协议 自主发展 如今 xff0c 科学可能看起来更像开源 世界各地的研究人员和科学家都在呼吁获得免费许可的数据集 开放获取发布条件 xff1b 以及协作 xff0c 透明的同行评审 他们正在寻找开放源代码原则可以增强数字时代知识生产实践
  • 开源 word 替代_5种Google文档的开源替代品

    开源 word 替代 每天处理大量文档时 xff0c 无论您写什么 xff08 白皮书 xff0c 手册 xff0c 演示文稿 xff0c 不同的市场营销材料 xff0c 合同等 xff09 xff0c 都必须在某个时候 xff08 最常见
  • vscode快捷键 & java/c++环境

    vscode快捷键 amp java c 43 43 环境 vscode快捷键环境配置javac 43 43 个人习惯设置参考 vscode快捷键 快捷键功能Ctrl 43 Shift 43 P 或 F1显示所有命令Ctrl 43 空格触发
  • IIC通信协议(简单易理解版)

    IIC通信协议简介 xff1a IIC xff08 也记为I2C xff0c 读作I 2C xff0c inter integrated Circuit集成电路总线 xff0c 最早是飞利浦在1982年开发设计并用于自己的芯片上 xff0c
  • linux防病毒软件_十大Linux最佳防病毒软件-Linux防病毒软件列表!

    linux防病毒软件 Today s article is all about the best Antivirus for Linux But if Linux is so secure why do we need to have an

随机推荐

  • Python isinstance()

    Python isinstance function is used to check if an object is an instance of the specified class or not Python的isinstance
  • 使用git下载仓库_使用Git仓库

    使用git下载仓库 Whenever we start a project we will need to store all files in a repository So let 39 s start by first creatin
  • 在Raspberry Pi(ARM32)上的Docker中构建,运行和测试.NET Core和ASP.NET Core 2.1

    I love me some Raspberry Pi They are great little learning machines and are super fun for kids to play with Even if thos
  • 什么是Ubuntu LTS?与常规Ubuntu版本有何不同?

    Ubuntu distributions are released at given time intervals Every release has a code name that is related to an animal nam
  • 定义一个protobuf消息并生成Go代码

    大家好 xff01 让我们开始gRPC课程的动手部分 整个部分的目标是构建 个人计算机 Web服务 xff0c 该服务将使我们能够管理和搜索笔记本电脑配置 Here 39 s the link to the full gRPC course
  • 学科起源(漫画版)

    发几张收藏的图 xff0c 让大家对学科起源有点了解 xff0c 避免因学科纷争而引起不和 xff0c 生命科学也罢 xff0c 神经网络也罢都摆脱不了从物理和数学的角度去解释 xff0c 因为机器学习中很大的一部分 xff0c 尤其是神经
  • 【沧海拾昧】WiFi串口通信ESP8266模块基本介绍(附野火WiFi透传实例)

    C0104 沧海茫茫千钟粟 xff0c 且拾吾昧一微尘 沧海拾昧集 64 CuPhoenix 阅前敬告 沧海拾昧集仅做个人学习笔记之用 xff0c 所述内容不专业不严谨不成体系 如有问题必是本集记录有谬 xff0c 切勿深究 目录 前言一
  • linux shell

    转自 xff1a http blog csdn net fly sky520 article details 8853537 最近在linux下面编写shell脚本 xff0c 差不多是边学边写 在此记录一些学习心得 一 xff09 she
  • 软件开发遇到的难题_软件开发团队如何处理管理难题

    软件开发遇到的难题 通常是这样的 项目经理或产品负责人传达了来自公司食品链上层人士的消息 xff0c 即必须在给定日期之前交付软件 日期背后的原因可能是已知的 xff0c 但可能不是 反过来 xff0c 项目经理通知软件开发团队必须在该日期
  • Ubuntu20.04由于分辨率问题安装界面显示不完整

    使用vmware安装ubuntu的时候 xff0c 由于分辨率的问题 xff0c 导致安装界面显示不完整 xff0c button被隐藏 xff0c 无法进行下一步鼠标操作 同学遇到的问题 xff0c 迟迟不能解决 xff0c 参考别人的解
  • 数据结构排序算法及代码整理

    排序 xff1b 1 插入排序 xff08 直接插入排序和希尔排序 xff09 2 选择排序 xff08 直接选择排序和堆排序 xff09 3 交换排序 xff08 冒泡排序和快速排序 xff09 4 归并排序 5 基数排序 xff0d x
  • 排序算法性能比较

    各种排序方法的综合比较 结论 排序方法 平均时间 最坏时间 辅助存储 简单排序 O n2 O n2 O 1 快速排序 O nlogn O n2 O logn 堆排序 O nlogn O nlogn O 1 归并排序 O nlogn O nl
  • c++标准容器类(表格介绍)

    1 STL有6种序列容器类型 xff08 1 xff09 vector 它提供对元素的随即访问 xff0c 在尾部添加和删除元素的时间是固定的 xff0c 在头部或中部插入和删除元素的复杂度为线性时间 xff08 2 xff09 deque
  • 各大公司薪水一览表

    转自 http blog sina com cn s blog 4997a23a0100b2xc html 最近终于把自己给卖了 xff0c 这几个月来自己陆陆续续的面试的有30多家公司 xff0c 主要是IT公司 xff0c 准备把今年我
  • strtol

    转自 xff1a http hi baidu com qwpsmile blog item 9bc44efa4f41018a9f514637 html 今天 xff0c 在review 一些代码的时候 xff0c 看到了strtol 这个函
  • 学会做自己的朋友

    转自 http www 5xue com modules article view article php a2233 你是否经历过 xff1a 我们常会怪罪自己 xff0c 给自己很低的评价 xff0c 也习惯对结果做最坏的打算 xff1
  • 二值信号量和互斥信号量的区别

    互斥信号量和二进制信号量的区别 互斥型信号量必须是同一个任务申请 xff0c 同一个任务释放 xff0c 其他任务释放无效 同一个任务可以递归申请 二进制信号量 xff0c 一个任务申请成功后 xff0c 可以由另一个任务释放 二进制信号量
  • 敏捷开发

    这两个圆圈表示不同的视角上的敏捷实践 xff0c 包括开发者视角和项目管理的视角 接下来从里向外进行介绍 xff0c 因为有些实践我了解得不清楚 xff0c 如果下面有哪些说得不对的地方也请大家指出 Test Driven Developm
  • c++结构体的二进制文件,python如何解析

    c 43 43 结构体的二进制文件 xff0c python如何解析 场景分析 现有如下场景 xff1a 有一个二进制文件需要解析成可读数据已知条件 xff1a 该文件符合c 43 43 结构体对应的结构体数据 xff0c 因此我们可以通过
  • LeetCode刷题记录(Python3)——线性表

    LeetCode27 移除元素 简单 问题描述 xff1a 给定一个数组nums和一个值val xff0c 你需要原地 移除所有数值等于val的元素 xff0c 并返回移除后数组的新长度 不要使用额外的数组空间 xff0c 必须仅使用 O