双指针应用--快慢指针
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、删除排序数组中的重复项。
以上是关于双指针应用--快慢指针的主要内容,如果未能解决你的问题,请参考以下文章