一 数组
1.1 基础
数组(Array):一种线性表数据结构。它使用一组连续的内存空间,来存储一组具有相同类型的数据。
→ 相同类型的数据元素构成的有序集合.
→ 注意定义里的 ----- 一组连续的内存空间
- 特点: 支持随机访问
- 关键: 索引和寻址
一维数组示例 :
- 数组和链表操作速度对比:
1.2 题目
1.2.1 15 . 三数之和
- 思路: 先排序 >>> 其次利用指针
i
遍历一遍数组 >>> 再利用target - num[i]
将区间[i + 1, n]
内转换为两数之和问题 >>>> 利用left, right
双指针解决问题 >>>> 最后注意得考虑重复元素问题
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
nums.sort()
ans, n = [], len(nums)
for i in range(n):
if i > 0 and nums[i] == nums[i - 1]: #遍历略去重复的nums[i]
continue
right = n - 1
for left in range(i + 1, n - 1):
if left > i + 1 and nums[left] == nums[left - 1]:
continue
while left < right and nums[left] + nums[right] > -nums[i]:
right -= 1 #若大于target(0 - nums[i]) , right左移
if left < right and nums[left] + nums[right] == -nums[i]:
ans.append([nums[i],nums[left],nums[right]])
return ans
1.2.2 26 . 删除有序数组中的重复项
- 思路: 建立快慢双指针
slow, fast
解决问题 >>>fast
负责遍历数组,slow
负责记录不重复元素 >>> 注意返回slow + 1
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
fast, slow = 0, 0
while fast < len(nums):
if nums[fast] != nums[slow]:
slow += 1
nums[slow] = nums[fast]
fast += 1
return slow + 1
1.2.3 27 . 移除元素
- 思路: 与上题一样利用快慢双指针
slow, fast
解决问题 >>>>fast
负责遍历数组,slow
负责记录不为val元素 >>>先替换再记录 >>> 注意返回slow
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
slow, fast = 0, 0
while fast < len(nums):
if nums[fast] != val:
nums[slow] = nums[fast]
slow += 1
fast += 1
return slow
参考资料
1.https://github.com/itcharge/LeetCode-Py Datewhale–31期算法leetcode刷题