算法题笔记(c++)

1.二进制中的与、或、非、异或运算

与运算

【与】运算符号为 & ,运算法则为遇0得0。也就是说只要有0,结果即为0。

举例:1001 & 1100

    1 0 0 1

      &

    1 1 0 0

    ————

    1 0 0 0

或运算

【或】运算符号为 | ,就是一个竖线,运算法则为遇1得1。也就是说,只要有1,结果就为1。

举例:1100 | 1010

    1 1 0 0

       |

    1 0 1 0

    ————

    1 1 1 0

非运算

【非】预算符号为 ~,就是一个波浪线,运算法则为按位取反,也就是遇1取0,遇0取1,即 ~1 = 0 , ~0 = 1;

举例:1001 & 1001

    1 0 1 1

        ~

    ————

    0 1 0 0

异或运算

【异或】运算符号为 ^,就是一个乘方符号,运算法则为相同取0,不同取1。异或运算,关键在异上面,异为1,否则为0。

举例:1001 & 1001

    1 0 1 1

2.链表问题   

使用双指针解决。例如:获取倒数第k个元素,获取中间位置的元素,判断链表是否存在环

1.倒数第k个元素的问题

设有两个指针 p 和 q,初始时均指向头结点。首先,先让 p 沿着 next 移动 k 次。此时,p 指向第 k+1个结点,q 指向头节点,两个指针的距离为 k 。然后,同时移动 p 和 q,直到 p 指向空,此时 q 即指向倒数第 k 个结点。

2.获取中间位置的元素

设有两个指针 fast 和 slow,初始时指向头节点。每次移动时,fast向后走两次,slow向后走一次,直到 fast 无法向后走两次。这使得在每轮移动之后。fast 和 slow 的距离就会增加一。设链表有 n 个元素,那么最多移动 n/2 轮。当 n 为奇数时,slow 恰好指向中间结点,当 n 为 偶数时,slow 恰好指向中间两个结点的靠前一个。

3.判断链表是否存在环

与问题2的解决方法一致,使用快慢指针,当slow==fast时,成环,fast==nullptr || fast->next==nullptr,不成环。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值