剑指笔记

剑指笔记

3 二维数组中的查找

题目描述

​ 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

题解思路

​ 这样一个二维数组,每一行的最右都是此行的最大值,也是此列的最小值,从右上角开始遍历的话,分如下情况讨论:

  • 若此元素比目标元素小,则说明目标元素不在此行
  • 若此目标比目标元素大,则说明目标元素不在此列
  • 每次判断都可以抛弃掉一行或者一列,时间复杂度为O(行长度+列长度)

双栈操作当做队列

分析:

  • 假如栈1压入ABC,要弹出A,则需要将ABC全部再压一遍入栈2中
  • 此时弹出A,栈2从上到下为BC,则如果要弹出BC则可以直接弹
  • 如果要压栈,全部加入栈1
  • 所以可以得到逻辑
    • 压栈全部压入栈1
    • 出栈时判断栈2是否为空
      • 若栈2为空,则将栈1的全部元素出栈再压入栈2
      • 若栈2不空,则直接弹出栈2

斐波那契数列

1.常规解法 递归

  • 时间复杂度O(2的n次)
  • 空间复杂度O(1)

2.优化,递归算法由于多次重复计算了相同的数据,我们可以将这些数据存起来

  • 将每个都存在数组中,下一个数组调用前两个即可
  • 时间复杂度O(N)
  • 空间复杂度O(N)

3.空间优化,由于只需要保存前两位,所以我们开一个三位长的数组即可

  • 时间复杂度O(n)
  • 空间复杂度O(1)

跳台阶

只能跳一层或者两层

  • 跳到n层台阶=跳到n-1层的方法数+跳到n-2层的方法数
  • n级台阶就相当于n-1级再跳一次一阶的和n-2级再跳一次2阶的

一次可以跳(1-n)层

  • F(N)=F(N-1)+F(N-2)+…+F(1)
  • F(N-1)=F(N-2)+…+F(1)
  • 两式相减,可得F(n)=2*F(n-1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值