1.1数据结构
1.1.1数据结构的定义
(1)数据:是描述客观事物的数、字符以及所有能输入到计算机中并被计算机程序处理的符号的集合。
数据元素:是数据的基本单位,在计算机中通常作为整体处理
数据项:是具有独立含义的数据最小单位,也称为成员或域
(2)数据结构:是指所涉及的数据元素以及数据元素之间的关系,可以看作是相互之间存在着特定关系的数据元素的集合。(是相互之间存在一种或多种特定关系的数据元素的集合)
数据结构 = 数据对象 + 结构
1.1.2数据结构
(1)集合结构:数据元素之间的关系是“属于同一个集合 ”
(2)线性结构:数据元素之间存在一对一的关系
i)线性结构又分为顺序和链表两种结构(根据存储方式划分)
ii)顺序:是把逻辑上相邻的元素存储在物理位置相邻的存储单元中
链表:对逻辑上相邻元素不要求其物理位置相邻,元素间的逻辑方式通过指示元素存储地址的指针来表示
(3)树形结构:数据元素之间存在一对多的关系
(4)图形结构:数据元素之间存在着多对一的关系(该结构也称为网状结构)
2.1数组
2.1.1数组的概念
(1)定义方式:数据类型 数组名【数组长度】
(2)定义:数组是n(n>1)个相同类型的数据元素所构成的有限序列
(3)数组只能覆盖
2.1.2数组的基本操作
(1)二分查找:又称折半查找,是一种效率极高的查找方法。该方法要求顺序表中的元素是有序的,即表中元素按关键字有序,假设有序顺序表中的元素是递增有序的
(2)移动元素
i)原地移除
a)暴力解法
class Solution:
def removeElement(self,nums:List[int],val:int)->int:
i,l = 0,len(nums)
while i < l:
if num[i] == val:
for j in range(i+1,l):
nums[j - 1]=nums[j]
l-=1
i-=1
return l
b)快慢指针法
class Solution:
def removeElement(self,nums:List[int],val:int)->int:
fast=0
slow=0
size=len(nums)
while fast<size:
if nums[fast]!=val:
nums[slow]=nums[fast]
slow+=1
fast+=1
return slow
2.1.3有序数组的平方
eg:给你一个按非递减顺序排序的整数数组,返回每个数字的平方组成新的数组,要求也按非递减顺序排列
a)暴力拆解法
b)快慢指针法
c)滑动窗口法
class Solution:
def nminSubArrayLen(self,s,nums):
l = len(nums)
left = 0
right = 0
min_len = float('int')
cur_sum = 0
while right < 1:
cur_sum += nums[right]
while cur_sum >= s:
min_len = min(min_len,right - left + 1)
cur_sum -= nums[left]
left += 1
right += 1
return min_len if min_len != float('int')else 0
2.2.1小练习
力扣977 “有序数组的平方”
要求给定一个按非递减顺序排序的整数数组 nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
力扣209题 “长度最小的子数组”
要求给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。
力扣904题 “水果成篮”
要求给定一个二维数组 grid,其中每个值代表一个水果类型。目标是找到包含至少一个水果的每个水果类型的行数的最大值。