双指针题目
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。
暴力解法要注意python里面for循环range是固定的,不能像c一样通过控制for循环里面的size控制循环次数,只能用while循环
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
cishu = 0
i = 0
size = len(nums)
while (i<size):
if nums[i]==val:
for j in range(i+1,size):
nums[j-1] = nums[j]
size -= 1
cishu += 1
else:
i += 1
return size
双指针解法,通过快慢指针来实现,快指针遍历整个数组,慢指针记录新数组的位置
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
left = 0
for i in range (len(nums)):
if (nums[i]!=val):
nums[left] = nums[i]
left += 1
return left
给你一个按非递减顺序排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
关键在于大的一定在两边,通过双指针进行遍历,然后将大的值放到新数组的末端
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
size = len(nums)-1
right = size
left = 0
result = [0] * len(nums) # 初始化 result 列表,长度与 nums 一样
while(left<=right):
if (nums[left]*nums[left]>nums[right]*nums[right]):
result[size]=nums[left]*nums[left]
left += 1
size -= 1
else:
result[size] = nums[right]*nums[right]
right -= 1
size -= 1
return result