leetcode双指针系列1: LC26删除有序数组中的重复项,LC674最长连续递增序列,LC27移除元素,LC80 删除有序数组中的重复项II,LC 283 移动零,LC75 颜色分类

news/2025/1/15 19:00:21/

双指针思想通常用来解决数组或者字符串的子序列问题,

使用双指针,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部
在循环中,判断条件都是右指针所在位置,如果满足,会对右指针位置进行处理,然后放到左指针位置。

leetcode 26 删除有序数组中的重复项
leetcode 674 最长连续递增序列
leetcode 27 移除元素
leetcode 80 删除有序数组中的重复项 II
leetcode 283 移动零
leetcode 75 颜色分类

都可以用上述的思想解决问题。即,确定好已经处理好的部分,和将要处理的部分。
题目内容我就懒得描述了。。网上有很多,只给出答案。

leetcode26 删除有序数组中的重复项
输入:nums = [0,0,1,1,1,2,2,3,3,4]
输出:5, nums = [0,1,2,3,4]
解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。不需要考虑数组中超出新长度后面的元素。

class Solution:def removeDuplicates(self, nums: List[int]) -> int:if not nums:return 0n = len(nums)fast,slow = 1,1while fast < n:if nums[fast] != nums[fast - 1]:# 找切换点nums[slow] = nums[fast]slow += 1fast += 1return slow

leetcode 674 最长连续递增序列(的长度)

class Solution:def findLengthOfLCIS(self, nums: List[int]) -> int:n=len(nums)curr_len=1max_len=1i,j=0,1while j<n:if nums[j]>nums[i]:curr_len+=1else:curr_len=1max_len=max(curr_len,max_len)i+=1j+=1return max_len

leetcode 27 移除元素
输入:nums = [0,1,2,2,3,0,4,2], val = 2
输出:5, nums = [0,1,4,0,3]
解释:函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。

class Solution:def removeElement(self, nums: List[int], val: int) -> int:n=len(nums)if n==0:return 0slow,fast=0,0while fast<n:if nums[fast]!=val:nums[slow]=nums[fast] # 抓住核心要求slow+=1fast+=1return slow 

leetcode 283 移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

class Solution: # 参考leetcode 27 移除元素def moveZeroes(self, nums: List[int]) -> None:"""Do not return anything, modify nums in-place instead."""n=len(nums)i,j=0,0while j<n:if nums[j]!=0:if nums[i]==0:nums[i],nums[j]=nums[j],nums[i] i+=1j+=1return nums

leetcode 80 删除有序数组中的重复项 II
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。
输入:nums = [0,0,1,1,1,1,2,3,3]
输出:7, nums = [0,0,1,1,2,3,3]
解释:函数应返回新长度 length = 7, 并且原数组的前五个元素被修改为 0, 0, 1, 1, 2, 3, 3 。 不需要考虑数组中超出新长度后面的元素。

class Solution: #这个模板适用于每个元素最多出现任意次,只需要修改其中两行代码即可def removeDuplicates(self, nums: List[int]) -> int:n=len(nums)slow,fast=2,2while fast<n :if nums[fast]!=nums[slow-2]: # slow-2,slow-1,slow..fast有超过2个的重复nums[slow]=nums[fast]slow+=1fast+=1return slow

leetcode 75 颜色分类
给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
必须在不使用库的sort函数的情况下解决这个问题。

class Solution:def sortColors(self, nums: List[int]) -> None:"""Do not return anything, modify nums in-place instead."""n=len(nums)i,j=0,0while j<n: #2移动到最右边if nums[j]!=2:if nums[i]==2:nums[i],nums[j]=nums[j],nums[i]i+=1j+=1# print(nums)i,j=n-1,n-1while i>=0: #0移动到最左边if nums[i]!=0:if nums[j]==0:nums[i],nums[j]=nums[j],nums[i]j-=1i-=1return nums

http://www.ppmy.cn/news/849343.html

相关文章

R900527918、LC80B10D6X/博世力士乐二通插装阀

标准系列 规格 16 … 160 组件系列 6X, 2X, 7X 最大工作压力 420 bar 最大流量 25000 l/min 特征&#xff1a; 带或不带衰减阻尼的阀架 2 个面积比 6 种不同的开启压力 01 02 03 04 05 06 07 LC / 型号 01 插装阀 LC 规格 02 规格 16 16 规格 25 25 …

【JAVA】仿顺丰淘宝智能识别信息模块——DidYourTypeItCorrectly

文章目录 题目项目层级结构解答已完成的部分简介未完成的部分概述代码部分DidYourTypeCorrectly.javaFormModel.javaIntelligentRecognition.javaMVCWindow.javaPlaint.java 运行结果截图结语 题目 模拟顺风地址智能识别&#xff0c;对用户输入的信息&#xff0c;包括&#xf…

基于 FPGA 的 HDMI/DVI 显示

文章目录 前言一、HDMI 与 DVI 的区别与联系1.1 DVI 接口含义1.2 HDMI 接口含义1.3 HDMI 与 DVI 的区别1.4 HDMI 与 DVI 的兼容性1.5 HDMI 与 DVI 接口对比 二、DVI 数据链路介绍2.1 输入接口层2.2 TMDS 发送器2.3 TMDS 接收器2.4 输出接口层 三、传输原理与实现3.1 TMDS原理3.…

苹果APP安装包ipa如何安装在手机上

苹果APP的安装比安卓复杂且困难&#xff0c;很多人不知道如何将ipa文件安装到手机上。以下是几种苹果APP安装在iOS设备的方式&#xff0c;供大家参考。 一、上架App Store 这是最正规的方式。虽然审核过程复杂、时间较长&#xff0c;且审核条件较为苛刻&#xff0c;但借助第三…

Unity基于C#事件委托机制

事件委托是一种用于实现观察者模式的设计模式&#xff0c;它允许对象在发生特定事件时通知其他对象。在Unity中&#xff0c;事件委托机制为开发者提供了一种简单而有效的方式来处理游戏中的事件和交互。 对啦&#xff01;这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的…

高速入门知识02:降低串扰和维持信号完整性的布线方法

文章目录 前言一、单端走线布线1.1.带有短截线的菊花链布线1.2.没有短截线的菊花链布线1.3.星型布线1.4.蛇型布线 二、差分走线布线 前言 串扰是并行走线间不需要的信号耦合。微带线和带状线正确的布线和叠层布局能够降低串扰。 双带线布局有两个靠近的信号层&#xff0c;为降…

Rogue DHCP Server攻击(仿冒DHCP Server攻击)

目录 事件原理 DHCP 仿冒攻击 防护方法 事件原理 攻击原理:攻击者仿冒DHCP Server向客户端分配错误的IP地址以及错误的网关等信息,导致用户无法正常的访问网络。漏洞分析:DHCP客户端收到DHCP Server的DHCP消息之后,无法区分这些DHCP消息是来自仿冒的DHCP Server还是…

希捷撤离 硬盘的那些风花雪月记忆

小刀马 曾几何时&#xff0c;希捷&#xff0c;西部数据&#xff0c;三星&#xff0c;东芝、富士通&#xff0c;这些硬盘品牌都是非常流行的&#xff0c;而自己拥有的第一部硬盘也是希捷&#xff0c;那时候记得是600MB&#xff0c;但是价格也是1千多了&#xff0c;后来慢慢的PC都…