数据结构与算法-2

相关示例代码:github

1. 递归算法的时间复杂度计算

递归问题必须遵循此模型时,子问题规模必须相等,可以直接得出时间复杂度,其中:
N:问题规模
N/b:子问题规模
a:子问题调用了a次
a,b,d都是常数

在这里插入图片描述

例子,递归求数组最大值算法,其时间复杂度模型为 T(N) = 2 * T(N/2) + O(N^0)
结果为O(N),计算方法如图
N为数组长度
b为2,因为子问题规模为N/2
a为2,因为分成两个子问题
d为0,因为其他逻辑均为常数时间复杂度

public class GetMax {
    
    public static int getMax(int[] arr) {
        return process(arr, 0, arr.length - 1);
    }

    public static int process(int[] arr, int left, int right) {
        if (left == right) {
            return arr[left];
        }
        int mid = left + ((right - left) >> 1); //常数复杂度
        int leftMax = process(arr, left, mid); //子问题 N/2规模,第一次调用
        int rightMax = process(arr, mid, right); //子问题 N/2规模,第二次调用
        return leftMax > rightMax ? leftMax : rightMax;
    }
}

2.常见问题

  1. 如何用栈实现队列:两个栈来回倒
  2. 如何用队列实现栈:两个队列来回倒

以下问题,请见代码 github

  1. 如何用数组实现固定大小的栈或者队列?
  2. 如何获取栈中数据的最小值?
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值