Skip to content

02-一维数组封装和操作-复杂度分析

本讲为数据结构和算法系列第二讲,聚焦一维数组的封装与复杂度分析。

核心内容

  • 一维数组封装思路:自定义容量与边界检查
  • 增删改查操作实现
  • 边界处理与异常设计
  • 复杂度分析与动态扩容
java
// 自封装一维数组
public class MyArray {
    private int[] data;
    private int size;

    public MyArray(int capacity) {
        this.data = new int[capacity];
        this.size = 0;
    }

    // O(1)
    public int get(int index) {
        checkIndex(index);
        return data[index];
    }

    // O(n)
    public void insert(int index, int value) {
        checkIndexForInsert(index);
        if (size == data.length) resize(data.length * 2);
        for (int i = size; i > index; i--) data[i] = data[i - 1];
        data[index] = value;
        size++;
    }

    // O(n) 扩容
    private void resize(int newCapacity) {
        int[] newData = new int[newCapacity];
        System.arraycopy(data, 0, newData, 0, size);
        this.data = newData;
    }
}

复杂度分析

操作时间复杂度
get(index)O(1)
set(index)O(1)
insert(index)O(n)
delete(index)O(n)
resizeO(n)(均摊后 O(1))