代码随想录——406. 根据身高重建队列

class Solution {
    public int[][] reconstructQueue(int[][] people) {
        Arrays.sort(people, (a, b) -> {
            if (a[0] == b[0]) return a[1] - b[1];   
            return b[0] - a[0];   
        });

        LinkedList<int[]> que = new LinkedList<>();

        for(int[] p : people){
            que.add(p[1],p);
        }

        return que.toArray(new int[people.length][]);
    }
}

一、这道题和分发糖果的那道题是一个题型:遇到两个维度权衡的时候,一定要先确定一个维度,再确定另一个维度。

二、LinkedList.add() 方法是 Java 中 LinkedList 类的方法之一,用于在链表的末尾添加一个元素。底层原理涉及到链表的数据结构和指针操作。

LinkedList 是由节点(Node)组成的链表结构,每个节点包含一个数据元素和指向下一个节点的指针。在链表中,每个节点都是通过指针与前一个节点和后一个节点连接起来的。

当调用 LinkedList.add() 方法时,它会执行以下步骤:

  1. 创建一个新的节点,将要添加的元素作为节点的数据元素。
  2. 如果链表为空(即没有任何节点),则将新节点设置为链表的头节点。
  3. 否则,找到链表的最后一个节点。
  4. 将最后一个节点的指针指向新节点,将新节点设置为链表的最后一个节点。

这样,新节点就被成功添加到了链表的末尾。

LinkedList.add() 方法的时间复杂度为 O(1),因为它只需要执行常数次指针操作,而不受链表长度的影响。这使得在链表的末尾添加元素非常高效。

需要注意的是,由于 LinkedList 是一个双向链表,还可以使用 LinkedList.addFirst() 方法在链表的开头添加元素,以及使用 LinkedList.add(index, element) 方法在指定位置插入元素。这些方法的底层原理与 LinkedList.add() 类似,都是通过节点和指针操作完成的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值