题目:
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
解题思路:
确定当前非val值,先前覆盖,尾指针位置自增即可
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
len_ = len(nums)
if len_ == 0:
return 0
idx = 0
for i in range(len_):
if nums[i] != val:
nums[idx] = nums[i]
idx += 1
return idx
题目:
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。
思路:
同(1),还是一个指针确定当前不重复的尾部位置,另一个指针去找寻符合条件的值。
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
len_nums = len(nums)
if len_nums <= 1:
return len_nums
idx = 0
for i in range(1, len_nums):
if nums[idx] != nums[i]:
idx += 1
nums[idx] = nums[i]
return idx+1
class Solution(object):
def removeDuplicates(self, nums):
for i in range(len(nums) - 1, 0, -1):
if nums[i] == nums[i - 1]:
del nums[i]
return len(nums)
题目:
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
解题思路:
找出所有非零值向前移动,记录尾指针位置,将尾指针之后所有元素置零
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
len_nums = len(nums)
if len_nums <= 1:
return
idx = 0
for i in range(len_nums):
if nums[i] != 0:
nums[idx] = nums[i]
idx += 1
while idx < len_nums:
nums[idx] = 0
idx += 1
题目:
给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。
注意:如果对空文本输入退格字符,文本继续为空。
解题思路:
异常处理前端无用"#",然后处理字符串即可
class Solution:
def backspaceCompare(self, s: str, t: str) -> bool:
s_list, t_list = [], []
s, t = s.lstrip("#"), t.lstrip("#")
for i in s:
if i != "#":
s_list.append(i)
else:
s_list = s_list[:-1]
for i in t:
if i != "#":
t_list.append(i)
else:
t_list = t_list[:-1]
return True if t_list == s_list else False
题目:
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
解题思路:
lambda的妙用,绝对值大小排序即可
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
nums.sort(key = lambda x:abs(x), reverse = False)
for i in range(len(nums)):
nums[i] = nums[i] ** 2
return nums