双指针应用--快慢指针

Posted yijierui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了双指针应用--快慢指针相关的知识,希望对你有一定的参考价值。

1、给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

算法思路:新数组: nums[0.......l]

def removeElement(nums,val):
#想象一个新数组nums[0....l],其索引从0...l。 l
=0 #遍历现数组,找出不等于val的数,然后赋值给新数组。 for r in range(len(nums)): if nums[r]!=val: #赋值. nums[l]=nums[r] l+=1 return l nums = [0,1,2,2,3,0,4,2] val=2 print(removeElement(nums,val))

2、给定一个二进制数组, 计算其中最大连续1的个数。 输入: [1,1,0,1,1,1]  输出: 3。

    算法思路:初始化count=0用于记录1的个数,初始化res=0用来记录连续1的个数。指针 i 用于遍历数组,遇到1,count自增。遇到 0,count归零。res=max(res,count)。

def findMaxConsecutiveOnes(nums):
    if 1 not in nums:
        return 0
    else:
        n=len(nums)
        count=0
        res=0
        for i in range(len(nums)):
            if nums[i]!=0:
                count+=1
                res=max(res,count)
            if nums[i]==0:
                count=0
        return res


nums=[1,1,0,1,1,1]
print(findMaxConsecutiveOnes(nums))

3、给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

输入: "Let‘s take LeetCode contest" 输出: "s‘teL ekat edoCteeL tsetnoc"
算法思路:将字符串转换成列表。想象一个新的列表,索引 0....j。遍历现列表,翻转其中的元素,然后赋值给新列表。
def reverseWords(s):
    s=s.split()
    n=len(s)
    j=0
    for i in range(n):
        s[j]=s[i][::-1]
        j+=1
    return " ".join(s)
    
s="Let‘s take LeetCode contest"
print(reverseWords(s))

4、删除排序数组中的重复项。

 

 


以上是关于双指针应用--快慢指针的主要内容,如果未能解决你的问题,请参考以下文章

算法复习:双指针(对撞指针快慢指针)

双指针的快慢指针和对撞指针

双指针的快慢指针和对撞指针

LeetCode 142. 环形链表 II(逻辑环链表快慢双指针)

双指针3环形链表Ⅱ(快慢指针)

双指针3环形链表Ⅱ(快慢指针)