数据结构概念与数组基本知识

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,其中每个值代表一个水果类型。目标是找到包含至少一个水果的每个水果类型的行数的最大值。

力扣76题  “最小覆盖子串”

要求给定两个字符串 st,从字符串 s 中找到最短的子串,使得 t 中的每个字符都包含在 s 的子串中,且字符的频率也要相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值