Task13

本文链接:

https://blog.csdn.net/qq_34811382/article/details/113130647


160 相交链表

在这里插入图片描述
在这里插入图片描述


思路:

利用两个指针来进行遍历,P1先从l1开始然后l2,p2先从l2开始然后l1。
如果有重合的,后面的元素一定是重合的。

代码:

class Solution
{
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB)
    {
        ListNode *a = headA, *b = headB;
        while (a != b)
        {
            if (headA == nullptr || headB == nullptr)
                return nullptr;
            if (a != nullptr)
                a = a->next;
            else
                a = headB;
            if (b != nullptr)
                b = b->next;
            else
                b = headA;
        }
        return a;
    }
};

169 多数元素

在这里插入图片描述

思路:

摩尔投票,如果有人投你,计数就++,否则就- -,如果超过半数投你,最后你的计数肯定大于0


通俗来讲,核心就是对拼消耗


玩一个诸侯争霸的游戏,假设你方人口超过总人口一半以上,并且能保证每个人口出去干仗都能一对一同归于尽。最后还有人活下来的国家就是胜利。那就大混战呗,最差所有人都联合起来对付你(对应你每次选择作为计数器的数都是众数),或者其他国家也会相互攻击(会选择其他数作为计数器的数),但是只要你们不要内斗,最后肯定你赢。最后能剩下的必定是自己人。

代码:

class Solution
{
public:
    int majorityElement(vector<int> &nums)
    {
        int count = 0, cadicate = 0;
        for (int n : nums)
        {
            if (count == 0)
                cadicate = n;
            if (cadicate == n)
                count++;
            else
                count--;
        }
        return cadicate;
    }
};

206 反转链表

在这里插入图片描述

思路:

双指针,一点一点的反转。通过一次遍历,将第一个节点作为尾节点,第二个节点指向第一个,第三个指向第四个……

代码:

class Solution
{
public:
    ListNode *reverseList(ListNode *head)
    {
        if (head == nullptr || head->next == nullptr)
            return head;
        ListNode *end = nullptr, *p1 = head;
        while (p1 != nullptr)
        {
            ListNode *temp = p1->next;
            p1->next = end;
            end = p1;
            p1 = temp;
        }
        return end;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值