leetcode day2

本文介绍了三种链表操作的解决方案:一是从尾到头打印链表,通过两次遍历来实现;二是反转链表,使用头插法;三是复杂链表的复制,利用哈希表辅助完成节点复制和随机指针的设置。

剑指 Offer 06. 从尾到头打印链表

思路:两次遍历。第一次遍历获取链表节点个数;第二次遍历从后往前存储数据

class Solution {
    public int[] reversePrint(ListNode head) {
        int len = 0;
        ListNode node = head;
        while(node!=null){
            len++;
            node = node.next;
        }
        int res[] = new int[len];
        while (head!=null){
            res[--len] = head.val;
            head = head.next;
        }
        return res;
    }
}

剑指 Offer 24. 反转链表

思路:反转链表应该想到用头插法。想清楚插入节点时的操作顺序。

class Solution {
    public ListNode reverseList(ListNode head) {
       if (head==null|| head.next==null){
           return head;
       }
       ListNode cur = head;
       ListNode next;
       ListNode new_head = new ListNode(0);
       while (cur!=null){
           next = cur.next;
           cur.next = new_head.next;
           new_head.next = cur;
           cur = next;
       }
       return new_head.next;
    }
}

剑指 Offer 35. 复杂链表的复制

思路:这个有点难,用到了哈希表。复习时再看看

class Solution {
    public Node copyRandomList(Node head) {
        if (head == null)
            return head;
        Map<Node,Node> map = new HashMap<>();
        for (Node cur = head;cur!=null;cur=cur.next){
            map.put(cur,new Node(cur.val));
        }
        for (Node cur=head;cur!=null;cur=cur.next){
            map.get(cur).next = map.get(cur.next);
            map.get(cur).random = map.get(cur.random);
        }
        return map.get(head);
    }
}

### LeetCode 积分获取方式 在 LeetCode 平台上,用户可以通过多种途径来增加自己的积分。完成每日题目能够使用户的分数有所增长[^1]。例如,在提到的一个实例中,“今日得分:+10 总得分:240”,这表明通过解决特定问题可以获得额外的积分奖励。 除了日常挑战外,参与周赛也是提升积分的有效手段之一。每周的比赛不仅考验参赛者的编程技巧,还提供了赢得更高排名的机会,从而带来更多的积分收益。不过需要注意的是,并未直接提及周赛的具体加分机制。 对于那些希望快速提高自己积分的人来说,专注于解答高难度的问题可能是一个不错的选择。通常来说,越难的任务完成后所给予的经验值也会相应增多。然而具体每道题目的确切分值并未在此处给出说明。 另外值得注意的是,持续活跃于社区讨论区也可能间接帮助个人积累更多积分。虽然这种活动本身并不直接贡献于积分系统,但是积极参与可以促进技能成长并发现更高效的解法路径,进而有助于更好地应对各类竞赛和练习中的难题。 ```sql -- 这里提供了一个SQL查询的例子用于计算玩家留存率,而非直接关联到积分制度, -- 但展示了如何利用数据库操作分析平台上的行为数据。 SELECT ROUND(COUNT(DISTINCT player_id) / (SELECT COUNT(DISTINCT player_id) FROM Activity), 2) AS fraction FROM Activity WHERE (player_id, DATE_SUB(event_date, INTERVAL 1 DAY)) IN ( SELECT player_id, MIN(event_date) FROM Activity GROUP BY player_id); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值