专门做图片的网站有哪些,网站代码修改,网站建设华企,留电话咨询看房算法题目第一讲#xff1a;双指针处理数组题目
解决力扣#xff1a;
[344. 反转字符串][167. 两数之和 II - 输入有序数组][26. 删除有序数组中的重复项][27. 移除元素][283. 移动零][5. 最长回文子串]
配合b站视频讲解食用更佳:https://www.bilibili.com/video/BV1vW4y1P…算法题目第一讲双指针处理数组题目
解决力扣
[344. 反转字符串][167. 两数之和 II - 输入有序数组][26. 删除有序数组中的重复项][27. 移除元素][283. 移动零][5. 最长回文子串]
配合b站视频讲解食用更佳:https://www.bilibili.com/video/BV1vW4y1P7V7 核心提示好几道题是处理有序数组的
344.反转字符串
from typing import List
# lc codestart
class Solution:def reverseString(self, s: List[str]) - None:Do not return anything, modify s in-place instead.left,right 0, len(s)-1while(leftright):left_char s[left]right_char s[right]s[left] right_chars[right] left_charleft1right-1167: 有序数组
from typing import List
# lc codestart
class Solution:def twoSum(self, numbers: List[int], target: int) - List[int]:left,right 0, len(numbers) - 1while left right:# 因为有序可以小了左指针向右移动if numbers[left] numbers[right] target:left 1# 大了右指针向左移动elif numbers[left] numbers[right] target:right-1# 注意题目要求的返回值从1开始编号else:return [left1,right1]return [-1,-1]# lc codeend26 删除有序数组中的重复元素
# lc codestart
class Solution:def removeDuplicates(self, nums: List[int]) - int:# 空值则不用删除if len(nums) 0:return 0# 定义快慢指针slow,fast 0,0# 只要快指针没越界就继续往前走while fast len(nums):if nums[fast]!nums[slow]: # 不相等时慢指针需要1slow1 # 维护nums[0..slow]无重复nums[slow] nums[fast]fast1# 返回的是唯一值的个数也就是slow1return slow1
27.移除元素
from typing import List
# lc codestart
class Solution:def removeElement(self, nums: List[int], val: int) - int:fast,slow 0,0while fastlen(nums):if nums[fast] !val:nums[slow] nums[fast]slow 1fast1return slow移动零
class Solution:def moveZeroes(self, nums: List[int]) - None:Do not return anything, modify nums in-place instead.# step1用快慢双指针把非0的按顺序排好slow,fast 0,0while fast len(nums):if nums[fast]!0:nums[slow] nums[fast]slow1fast1# 最后几个补0操作 range是左闭右开的 19行slow1所以不会覆盖# 若全是0 则16行的while一次都没调用全部补0 从[0,len(nums)) 也是对的 for i in range(slow,len(nums)):nums[i] 0