数据结构与算法总结(一)——数组

一些基础

  • 数组是一种线性的数据结构,每个节点的大小一样,在内存上连续。可以通过下标快速定位想要查询的目标值,因此数组检索的效率高。
  • 数组的长度一旦设定就无法改变,删除数组的元素,事实上并不是删除,而是覆盖。数组只能通过一个新的值来覆盖旧的值。

题型

二分法
  • 有序数组查找,可以使用二分法。
  • 二分法最重要迷惑的点就是while循环里面是否有=,这个看情况,如果给定的数组右边是包括边界的,那么就要用=,因为当值取到最后一个元素的时候,还是可能是目标值,因此还是需要进入循环。
  • 另外一个很迷惑的点就是是否新的边界是否需要+1或者-1,这个也可以根据边界进行判断,因为数组的左边界是一定包括的,所以中间的点更新为左节点的时候,需要+1;因为中间的点一定不是目标值,而数组是包括边界的,所以可以排除掉中间节点,因此肯定可以+1。
  • 右节点的更新也是同理,如果可以取到右边界,而上一次判断已经知道该中间节点非需要的节点,因此可以-1.
  • 推荐题:
  • leetcode上面的题:
    704.二分查找,
    35.搜索插入位置,
    34.在排序数组中查找元素的第一个和最后一个位置
    69.x 的平方根
    367.有效的完全平方数
双指针
  • 双指针一般用于数组的移动,比如数组的数据去重,合并数组。
  • 一个指针指向下一个需要插入数据的节点,另一个指针指向要查询的数据节点;查询节点的值满足条件就把值放入要插入数据的节点。然后两个指针都往后移动。如果查询节点不满足,就查询节点往后移动。
  • 最后把数组需要的部分截出来,就是自己要的结果。
  • 推荐题:
    27.移除元素
    26.删除排序数组中的重复项
    283.移动零
    844.比较含退格的字符串
    977.有序数组的平方
滑动窗口
  • 滑动窗口一般用于在数组中查找几个相邻的数据达到某种特性,并且数据个数最少(或者最多)是多少个。
  • 一般左右指针都从0开始,然后总和小于目标值,就右指针+1,并把右边的新值加入到总和里。如果总和大于目标值,就左指针+1,总和减去左指针的值。并且每次调正之后都判断新的结果是否比上一次的结果更优。
  • 推荐题:
    209.长度最小的子数组
    904.水果成篮
    76.最小覆盖子串

参考:https://mp.weixin.qq.com/s/weyitJcVHBgFtSc19cbPdw

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值