【刷题---数组、递归和循环】基础【不断更新...】2021.03.11已更

本文探讨了数组的高效访问和STL vector的扩容原理,以及递归的优缺点,重点介绍了与之相关的编程面试题,如数组去重、斐波那契数列、矩阵操作等。还涵盖了LeetCode经典算法,如两数之和、查找重复数字等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、基本概念

1.数组的基本概念

(1)由于数组中的内存是连续的,于是可以根据下标在O(1)的时间内读写任何元素(时间效率很高)
(2)STL的vector每次扩容是新的容量是前一次的两倍。

  • STL扩容过程:
    把之前的数据复制到新的数组中,再把之前的内存释放。(每一次扩充数组时都有大量的额外操作,这对时间性能有负面影响,因此使用动态数组时要尽量减少改变数组容量的大小的次数)
  • 注:如果使用vector扩容得到的容量远远大于预期的容量可以使用成员函数
    shrink_to_fit()该成员函数可以使得vector缩减到合适的内存空间
    resize():该成员函数可以重新分配指定内存空间大小

2.递归的缺点

(1)由于是函数调用自身,而函数调用是有时间和空间消耗的:每一次函数调用都需要在内存中分配空间以保存参数、返回地址及临时变量,而且往栈里压入数据和弹出数据都需要时间。
(2)可能引起更严重的问题:调用栈溢出

  • 原因:需要为每一次函数调用在内存中分配空间,而每个进程的栈的容量是有限的。当递归调用的层级太多时,就会超出栈的容量,从而导致栈溢出。

二、涉及的题目概览(🔗会逐步更新)

1.剑指offer及部分公司面试真题

2.leetCode

  • 1 两数之和
  • 442数组中重复的数据
  • 31下一个排列
  • 15:三数之和
  • 1035:不相交的线
  • 79:单词搜索
  • 670:最大交换
  • 1002:查找常用字符
  • 面试题16.16:部分排序
  • 59:螺旋矩阵Ⅱ
  • 56:合并区间
  • 120:三角形最小路径和
  • 53:最大子序和
  • 面试题01.07:旋转矩阵
  • 1296:划分数组为连续数字的集合
  • 面试题01.01:判定字符是否唯一
  • 64:最小路径和
  • 面试题10.03:搜索旋转矩阵
  • 216:组合总数Ⅲ
  • 611:有效三角形的个数
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值