力扣数组刷题总结篇【一】

前言

刷题根据“代码随想录”流程完成,所以可以对照参考。
总结数组操作技巧。


知识点

来源【代码随想录】,挑出重点:

(1)考察数组的题目主要是考察对代码的掌控能力。
(2)数组直接通过下标获取数据。
(3)数组在内存空间的地址是连续的,所以在删除或者增添元素的时候,就难免要移动其他元素的地址。
(4)如果使用C++的话,要注意vector 和 array的区别,vector的底层实现是array,严格来讲vector是容器,不是数组。(vector可以自动管理内存,有成员函数,array动作就需要自己手动实现
(5)相信大家有遇到过这种情况: 感觉题目的边界调节超多,一波接着一波的判断,找边界,拆了东墙补西墙,好不容易运行通过了,代码写的十分冗余,毫无章法,其实真正解决题目的代码都是简洁的,或者有原则性的,深有体会。

思路

遇到数组操作,应该放哪方面想?

(1)双指针法

  • 原理:两个指针操作同一个数组,可以降低时间复杂度,相比与暴力解法,暴力解法就是两个for循环。注意:这里的指针不是int* p;指针变量的意思,就是下标索引而已,直接定义int i,j; 即可。
  • 两个指针巧妙使用:
    • 从同一端出发出发——【删除元素】,数组覆盖前移;
    • 从两端出发——【有序数组的平方】;
    • 滑动窗口——【最短子数组长度】

(2)循环不变量

  • 整个循环中,坚持区间统一原则,左闭右开或左闭右闭;从一而终。这样才能逻辑不混乱,不漏掉元素,也不重复操作元素。
  • 二分搜索法:前提——有序数组,找特定元素。
    • 时间复杂度:O(n)
    • 不要漏掉元素,也不重复操作元素。
  • 螺旋数组
    • 找到循环时,可以扩大范围,不要把一个while循环内for循环还多拆几步(个人第一次尝试的解法)。直接把一轮操作当做整体。
    • 转角元素最好交给下一棒for循环处理。这个方便操作。注意不要重复操作转角元素。

总结

数组篇典型题目结束,继续链表篇;
为巩固复习,穿插练习数组额外题目。
(欢迎指正,转载标明出处)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值