阅读视图

发现新文章,点击刷新页面。
☑️ ☆

ChatGPT大规模封号…

今天早上各个ChatGPT&AI群都在传一个消息:今天ChatGPT官方大面积封号,今天登录gpt千万别用亚洲节点!

过了会很多人开始发自己的帐号被封了:

ChatGPT大规模封号...

其实这不是ChatGPT第一次对中国用户下手,早在一个月前ChatGPT就在做各种针对中国用户的限制和封禁。

当然今天这种规模算是升级了,甚至我在知乎上看到有些日本、东南亚的用户也在讨论被封号了。

很多人可能要问为什么?包括我的ChatGPT星球上也有会员在问,其实原因很简单:ChatGPT这玩意真的能提升生产力,并且用好了是数倍提升。

而美国现在和中国是个啥状态,我就不用多说了。禁止我们使用就是打击竞争对手、就是抢占发展先机、就是“赢”,这跟禁止芯片出口法案是一个道理。

ChatGPT引爆的是一轮新的科技革命:AI技术革命,了解下历史就知道每一轮的科技革命不光是能改善普罗大众的生活水平,还能催生新的强国。

比如第一次工业革命,蒸汽机的出现改变了传统的农耕社会,英国率先抓住先机,应用蒸汽机建设工厂,虽然出现了“羊吃人”的情况,但最终因为社会生产力整体提升一跃成为全球最强国家。

再比如第二次工业革命,美国抓住机会参与进来,通过引入欧洲先进技术和管理经验,迅速崛起为发达国家。

再比如信息技术革命,我们国家错过了前两次技术革命的先机,但在上世纪90年代加入到信息技术革命,这才让我们有这么多的高科技巨头公司,也让中国整体实力大幅提升。

所以ChatGPT现在想各种办法禁止咱使用,说白了就是想限制我们的发展。

所以还在质疑AI时代的同学们不要犹豫了,抓紧了解AI甚至加入到AI赛道,用我的星球合伙人吴世春大佬的一句话就是:AI到了IPhone时刻,现在在AI领域学习一年,相当于其他行业混十年。

其实AI最近的发展还远不止ChatGPT,AI画图软件MJ的强大表现也令人咂舌,我发一张大家感受下:

ChatGPT大规模封号...

这种水平的制作直接能释放无数设计师的劳动力,直接能让游戏、动漫等领域的生产力提升几十倍甚至上百倍。

另外如果我们将AI底层的能力赋能给各种应用会发生什么呢?以后我们会有一个7*24小时的外教客服,它几乎通晓一切,能跟我们练100种外语并能分析我们的发音卡点、我们会有一个智能外卖客服,它能理解我们今天最想吃的东西并推荐给我们、我们还会有:论文助手、翻译助手、周报助手、健康助手等等。

今天我们所有的互联网应用都将会被AI重新颠覆一次,这是必然会发生的事情。

在未来会有两类人,一类人是会使用AI,甚至会用AI做创新工具的人、另一类是不了解AI或者抵触AI的人。

前者的生产力效率将是后者的10倍起步!

回到国家的话题,基于生产力提升的底层逻辑,我们必须快速研发大模型产品、我们必须快速研发基于大模型的上层应用产品。

我并不太看好百度,但我现在真心希望文心一言赶紧全面发布、快速迭代吧!另外我的老东家最近也发布了一款AI产品,老周现场演示虽然翻车了但也算是我们的一大步。

乐观点预计半年后中国应该出来好几款类似ChatGPT的产品,水平上或许有差距,但重点是要先有!相信我们的研发工程师在路径明确的情况下的追赶速度,一定不会慢!

那么我们这些普通人呢?我们该做什么?

我的答案是:尽快了解AI甚至杀入AI领域,只有这样我们才能在未来的社会竞争中立足脚跟,而不是被淘汰。

最后再介绍下我的星球:

8天时间,我的星球已经快6000成员,已经跃居ChatGPT&AI类全国第二!

这个星球我邀请了很多行业内真正的AI大咖,比如腾讯的大模型技术专家、阿里的大模型技术专家、虾皮算法部门技术专家、头条的算法专家、商汤的AI产品专家。

甚至还有好几个光年之外(王慧文AI创业团队)的超级大咖加入,甚至互联网超级投资大佬吴世春也加入了。

简单说下这个星球能给大家提供什么:

1.这里有AI行业内的高手,为你分享ChatGPT最新的玩法。
2.你可以在这里找到志同道合的小伙伴,一起探讨甚至实现AI创业。
3.大家有AI相关的问题可以在星球提问,我们会尽力解答。
4.4月4日前加入星球的小伙伴,都有一项额外福利,可以免费获得ChatGPT独立账号一个(账号在加入五天之内发放,另外因openai的原因账号使用过程中有被锁定风险)。
现在星球在运营初期,正式运营价格定为699,目前我给出了加入的最低价198,星球马上要来一波大的涨价,如果你还在犹豫,可能最后就要以更高价格加入了。
早就是优势,建议大家尽早以便宜的价格加入!
有兴趣的朋友们,欢迎扫码加入本星球:

ChatGPT大规模封号...

🔲 ⭐

恐怖的GPT4!我也入局了

大家好,我是吴师兄。
这段时间真是太刺激了,AI领域几乎每天都会爆出一个超震撼的产品,有一种科幻马上要成现实的感觉。

不知道大家朋友圈是什么样,在整个创业的圈子里面,几乎全是 AI 相关。

就连 N 多年,传说中退休的传统互联网大佬,也都纷纷出山,准备在这个大潮流中干一番,美团的王慧文、创新工场的李开复都从退休状态快速切换到鸡血all in AI。

没有别的原因:这是大势所趋,是人类未来10年、20年甚至30年的最大革命。

给大家梳理一下最近神仙打架事件:

3月15日,谷歌刚宣布没几个小时,OpenAI 开发布会了。

紧接着 OpenAI 宣布发布 GPT-4,大家都眼光一下就被吸引过去了,再也没人关注谷歌 AI 什么的。

3月16日,百度也开始火急火燎的发布了自己AI产品文心一言,竟然还是录播的,结果股价大跌。

恐怖的GPT4!我也入局了

结果到了晚上微软又给放了一个炸弹,发布 Copilot。

3月22日,谷歌终于发大招发布了 Bard!同日,GitHub 再次发布重磅“炸弹”:推出 Copilot X 计划。

3月23日,OpenAI 宣布推出插件功能,赋予 ChatGPT 使用工具、联网、运行计算的能力。

ChatGPT就是新的科技革命,一场AI革命,而这场革命的速度要比我们经历过的信息技术革命快10倍、快100倍。

同时他们的代价不一样,错过信息技术革命只不过意味着你没办法快速财务自由,但依旧有工作衣食无忧。而错过这场AI革命搞不好意味着你成为了无用的人。

但如果快速掌控ChatGPT那就太棒了,它能让有创业想法和能力的人更容易成功,超级个体熟练使用它就相当于免费雇佣了一个团队,能让它快速实现自己的创新想法。

说实话最近我挺焦虑的,当你看到趋势却不知道如何把握,这种感觉是非常痛苦的。

任何潮流任何红利,你不躬身入局就没有任何用。曾经我在移动时代到来之际犹豫了一年,结果导致入局晚了,没有什么大的成就。这一次我再也不想错过AI时代了。

抓住一次红利,真的是可以少奋斗很多年的。

我又是一个想法很多、比较喜欢尝试的人,所以在深思熟虑之后,我决定出手了!我也要入局 ChatGPT!

怎么入局呢?我觉得自己一个人的力量是有限的,首先要找到志同道合的人一起交流,所以自己最近就在观察有没有做的比较好的 ChatGPT 社群。

大家应该也注意到了,最近这方面的社群非常多,但我基本都不看好。为什么?因为社群最重要的是 “人”,一个圈子里大佬多、或者有人能带着你学习搞事情,那么进圈子对你来说就有价值。

但网上的很多社群,群主自己都没玩过 ChatGPT、也没有已经入局的大咖,纯靠账号吸引人。忽悠下 2G 网的人还行,反正忽悠不了我。

直到昨天,看到我的好友洋哥做的ChatGPT 破局俱乐部 ,才让我眼前一亮。

为什么?

1)人脉:暂且不说洋哥本人是前 360 技术总监,现大厂高管,技术产品都是一流水平;最关键的是,这个星球有 20 多位行业内大佬 有互联网大厂CTO、有创业公司CEO,还有光年之外(王慧文团队)的核心骨干,这些大佬中有的 ChatGPT 产品已经上线了,并高速发展!

连大佬刘江(美团技术学院院长,北京智源人工智能研究院副院长)都主动付费加入了这个星球,并被邀请成为嘉宾:

恐怖的GPT4!我也入局了


2)发展

洋哥的星球短短几天就发展到 2500 多人规模,目前在全国 GPT 星球排名前三:

恐怖的GPT4!我也入局了

简单说下这个星球能给大家提供什么:

1.这里有AI行业内的高手,为你分享ChatGPT最新的玩法。

2.你可以在这里找到志同道合的小伙伴,一起探讨甚至实现AI创业。

3.大家有AI相关的问题可以在星球提问,我们会尽力解答。

4.每个月一场的大咖直播。

5.4月2日前加入星球的小伙伴,都有一项额外福利,可以免费获得ChatGPT“独立”账号一个(账号在加入四天之内发放)。

现在星球在运营初期,正式运营价格定为299,目前我给出了加入的最低价199,后面星球成员每增加100人,星球费用会增长10元(估计发文后就会涨价)。早就是优势,建议大家尽早以便宜的价格加入!

恐怖的GPT4!我也入局了

☑️ ☆

字节面试题,最优解通过!

字节面试题,最优解通过!

通知:吴师兄学算法训练营第十期开启报名,预计 12 月 20 开营,解锁 400 题。

一、题目描述

给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为:L0→Ln→L1→Ln-1→L2→Ln-2→…

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例1:

给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.

示例2:

给定链表 1->2->3->4, 重新排列为 1->4->2->3.

字节面试题,最优解通过!

二、题目解析

这题属于是链表题的大杂烩了,包含了链表题型中会涉及到的很多思想,非常考研基本功,也难怪字节会考察,同时还希望你能给出最优解。

字节面试题,最优解通过!
图片来源于 LeetCode 143 号问题题解评论区

这道题目很考察基本功和观察能力,最终的结果就是将原链表的前半部分和原链表的后半部分反转之后的链表进行合并得到的

所以,需要执行以下三个操作。

  • 1、寻找出原链表的中点,把链表划分为两个区域
  • 2、将右边的链表进行反转
  • 3、把这两个区域进行交错合并

1、使用快慢指针寻找链表中点

在链表的头节点设置两个指针 slow、fast,同时将它们向后移动。

字节面试题,最优解通过!

每一次,slow 向后移动一步,fast 向后移动两步。

字节面试题,最优解通过!
字节面试题,最优解通过!

于是,找到了中间节点 5,把链表划分为两个区域。

字节面试题,最优解通过!

2、将右边的链表进行反转

字节面试题,最优解通过!

3、把这两个区域进行交错合并

属于归并排序的降维版本,这个操作不了解的话可以复习一下归并排序

三、参考代码

// LeetCode 100 题精讲:https://mp.weixin.qq.com/s/yznC53g46phq3qF7V4-obA
// 作者:程序员吴师兄
// 重排链表(LeetCode 143):https://leetcode.cn/problems/reorder-list/
class Solution {
    public void reorderList(ListNode head) {
    // a、寻找出原链表的中点,把链表划分为两个区域
        // b、将右边的链表进行反转
        // c、把这两个区域进行交错合并
      
        // 1、使用快慢指针寻找出链表的中点来 
       // *******************************************************
        // 对于 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8
        // 中间节点值为 5
        // 所以左边区域为 1 -> 2 -> 3 -> 4 -> 5
        // 右边区域为 6 -> 7 -> 8
        // 但在视频讲解中,我把 5 归为了右边区域,这是一个错误
        // 虽然这个错误并不影响结果,因为合并过程都是一样的逻辑
        // *******************************************************
        ListNode mid = middleNode(head);

        // 2、基于 mid 这个中点,将链表划分为两个区域

        // 左边的区域开头节点是 head
        ListNode leftHead = head;

        // 右边的区域开头节点是 mid.next
        ListNode rightHead = mid.next;

        // 将链表断开,就形成了两个链表了
        mid.next = null;

        // 3、将右边的链表进行反转
        rightHead = reverseList(rightHead);

        // 4、将这两个链表进行合并操作,即进行【交错拼接】
        while( leftHead != null && rightHead != null){

            // 拼接过程如下
            // 5、先记录左区域、右区域【接下来将有访问的两个节点】
            ListNode leftHeadNext = leftHead.next;

            ListNode rightHeadNext = rightHead.next;

            // 6、左边连接右边的开头
            leftHead.next = rightHead;

            // 7、leftHead 已经处理好,移动到下一个节点,即刚刚记录好的节点
            leftHead = leftHeadNext;

            // 8、右边连接左边的开头
            rightHead.next = leftHead;

            // 9、rightHead 已经处理好,移动到下一个节点,即刚刚记录好的节点
            rightHead = rightHeadNext;
            
        }

    }

    // LeetCode 876 : 链表的中间节点
    public ListNode middleNode(ListNode head) {

        ListNode fast = head;

        ListNode slow = head;

        while(fast != null && fast.next != null){

            fast = fast.next.next;

            slow = slow.next;
        }

        return slow;

    }

    // LeetCode 206 : 反转链表
    public ListNode reverseList(ListNode head) {

        // 寻找递归终止条件
        // 1、head 指向的结点为 null 
        // 2、head 指向的结点的下一个结点为 null 
        // 在这两种情况下,反转之后的结果还是它自己本身
        if( head == null || head.next == null)  return head;

        // 不断的通过递归调用,直到无法递归下去,递归的最小粒度是在最后一个节点
        // 因为到最后一个节点的时候,由于当前节点 head 的 next 节点是空,所以会直接返回 head
        ListNode cur = reverseList(head.next);

        // 比如原链表为 1 --> 2 --> 3 --> 4 --> 5
        // 第一次执行下面代码的时候,head 为 4,那么 head.next = 5
        // 那么 head.next.next 就是 5.next ,意思就是去设置 5 的下一个节点
        // 等号右侧为 head,意思就是设置 5 的下一个节点是 4

        // 这里出现了两个 next
        // 第一个 next 是「获取」 head 的下一节点
        // 第二个 next 是「设置」 当前节点的下一节点为等号右侧的值
        head.next.next = head;


        // head 原来的下一节点指向自己,所以 head 自己本身就不能再指向原来的下一节点了
        // 否则会发生无限循环
        head.next = null;

        // 我们把每次反转后的结果传递给上一层
        return cur;
    }
}

玩转 LeetCode 高频 100 题系列正在更新,全系列题目和所有视频讲解可点击下方图片查看:

字节面试题,最优解通过!

数组篇

1、LeetCode 283:移动零

2、LeetCode 75:颜色分类

3、LeetCode 26:删除有序数组中的重复项

4、LeetCode 88:合并两个有序数组

链表篇

1、LeetCode 876、链表的中间结点

2、字节实习一面,不画图,真的想不清楚!

系列介绍:LeetCode 刷多少题能进大厂面试?

☑️ ☆

字节实习一面,不画图,真的想不清楚!

字节实习一面,不画图,真的想不清楚!

通知:吴师兄学算法训练营第十期开启报名,预计 12 月 20 开营,解锁 400 题。

一、题目描述

给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表示例 1:

字节实习一面,不画图,真的想不清楚!
输入:head = [4,2,1,3]
输出:[1,2,3,4]

示例 2:

字节实习一面,不画图,真的想不清楚!
输入:head = [-1,5,3,4,0]
输出:[-1,0,3,4,5]

示例 3:

输入:head = []
输出:[] 

提示:

  • 链表中节点的数目在范围 [0, 5 * 10^4]
  • -10^5 <= Node.val <= 10^5

进阶:你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?

二、题目解析

我在这道题目的评论区看到有两个同学提到字节考察过,并且都是要实现 O(1) 的空间复杂度才过关

字节实习一面,不画图,真的想不清楚!
图片来源于 LeetCode 148 号问题题解评论区

这道题目确实挺有难度的,不画图,真的想不清楚。

题目要求时间空间复杂度分别为 O(nlogn) 和 O(1) ,根据时间复杂度和题目中的排序两个字,可以联想到归并排序快速排序

所以,本题有两种解法:归并排序快速排序

这里我们先用归并排序的思路进行处理,其中合并的基本操作如下:

  • 1、长度为 1 的链表和长度为 1 的链表合并后,形成一个长度为 2 的链表
  • 2、长度为 2 的链表和长度为 2 的链表合并后,形成一个长度为 4 的链表
  • 。。。

而由于合并过程中操作的是链表,所以需要有断链重新连接的过程。

字节实习一面,不画图,真的想不清楚!

具体操作步骤如下:

1、先获取链表长度,基于这个长度才能知道后续合并到什么时候截止

2、设置三个指针 prevcurrnext

其中, prev表示已经排序好的链表的【尾节点】。

curr 一开始设置为准备排序的那些节点的【首节点】,然后向后移动,获取相应的节点,到达所有正在准备排序的那些节点的【尾节点】位置。

next 表示接下来需要排序的那些节点的【首节点】。

字节实习一面,不画图,真的想不清楚!

3、断开 prevcurr 的连接,再断开 currnext 的连接。

字节实习一面,不画图,真的想不清楚!

4、把 curr 访问的这些节点划分为两个区域,区域的长度取决于此时进行到了长度为多少的链表进行合并操作,一个是左链表,一个是右链表,把这两个链表进行合并操作。

字节实习一面,不画图,真的想不清楚!

5、合并成功之后,prev 移动到尾部,curr 来到 next 的位置,继续后面的归并操作。

6、这样一轮下来,已经把长度为 2 的链表和长度为 2 的链表合并,形成了一个长度为 4 的链表。

字节实习一面,不画图,真的想不清楚!

7、接下来,只需要执行上述同样的操作,唯一的修改点在于合并的子链表长度变成了 4。

字节实习一面,不画图,真的想不清楚!

三、参考代码

// LeetCode 100 题精讲:https://mp.weixin.qq.com/s/yznC53g46phq3qF7V4-obA
// 作者:程序员吴师兄
// 排序链表(LeetCode 148):https://leetcode.cn/problems/sort-list/
class Solution {
    public ListNode sortList(ListNode head) {

        // 获链表的总长度
        int length = 0;

        // 从链表的头节点开始访问
        ListNode node = head;

        // 利用 while 循环,可以统计出链表的节点个数,即长度
        while (node != null) {

            length++;

            node = node.next;

        }

        // 在原链表的头部设置一个虚拟头节点
        // 因为可能会操作到原链表的头节点
        // 设置了虚拟头节点后,原链表的头节点和原链表的其它节点地位一样
        ListNode dummyHead = new ListNode(0, head);

        // 利用 for 循环,执行合并的操作
        // 长度为 1 的链表和长度为 1 的链表合并后,形成一个长度为 2 的链表
        // 长度为 2 的链表和长度为 2 的链表合并后,形成一个长度为 4 的链表
        // 长度为 4 的链表和长度为 4 的链表合并后,形成一个长度为 8 的链表
        // 长度为 8 的链表和长度为 8 的链表合并后,形成一个长度为 16 的链表
        // 也有可能是,长度为 8 的链表和长度为 5 的链表合并后,形成一个长度为 13 的链表
        // 但是,每次合并过程中,子链表都会想要扩充为原来的两倍
        // 直到子链表想要扩充的长度超过了 length
        for (int subLength = 1; subLength < length; subLength *= 2) {

            // 整个归并过程分为三个步骤
            // 1、不停的划分,直到无法划分为止
            // 2、开始两两合并
            // 3、每次合并之后的结果都需要连接起来

            // 每次都把结果连接到 dummyHead,因此先记录一下
            // prev 表示已经排序好的链表的【尾节点】
            ListNode prev = dummyHead;
            
            // dummyHead 的后面节点才是原链表的节点,需要把它们进行划分
            // curr 表示所有正在准备排序的那些节点的【尾节点】
            ListNode curr = dummyHead.next;

            // 利用 while 循环,寻找出每次划分后子链表的头节点
            while (curr != null) {
                
                // 每次都是两个子链表开始合并

                // 1、先寻找出【左子链表】,长度为 subLength
                ListNode head1 = curr;

                // 通过 for 循环,找出 subLength 个节点来
                // curr 的索引为 0 ,需要再找 subLength - 1 个节点来
                for (int i = 1; i < subLength && curr.next != null; i++) {

                    curr = curr.next;

                }

                // 2、再寻找出【右子链表】,长度最多为 subLength,甚至有可能长度为 0
                ListNode head2 = curr.next;

                // 此时,需要将【左子链表】与【右子链表】的连接断开
                curr.next = null;

                // curr 来到【右子链表】的头部
                curr = head2;

                // 通过 for 循环,找出【右子链表】的那些节点来
                // 【右子链表】的节点个数可能达不到 subLength,甚至只有 1 个或者 0 个节点
                for (int i = 1; i < subLength && curr != null && curr.next != null; i++) {

                    curr = curr.next;

                }

                // 获取到【右子链表】之后,需要把它和后续链表断开
                // next 表示接下来需要排序的那些节点的【首节点】
                ListNode next = null;

                // 如果 curr != null,那么说明【右子链表】的节点个数达到了 subLength 个,并且后续还有节点
                if (curr != null) {
                    
                    // 记录一下后面节点
                    next = curr.next;

                    // 再将【右子链表】和后续链表断开
                    curr.next = null;

                }

                // 将【左子链表】与【右子链表】合并
                ListNode merged = mergeTwoLists(head1, head2);

                // 合并之后的结果需要连接到前一个链表
                prev.next = merged;

                // prev 来到链表的尾部,是下一个即将合成链表之后的前一个链表的尾节点
                while (prev.next != null) {

                    prev = prev.next;

                }

                // curr 来到 next,处理后面的节点
                curr = next;
            }

        }

        return dummyHead.next;
    }

    // 合并两个有序链表的代码
    private ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        // 一开始设置一个虚拟节点,它的值为 -1,它的值可以设置为任何的数,因为我们根本不需要使用它的值
        ListNode dummy = new ListNode(-1);

        // 设置一个指针,指向虚拟节点
        ListNode pre = dummy;

        // 通过一个循环,不断的比较 l1 和 l2 中当前节点值的大小,直到 l1 或者 l2 遍历完毕为止
        while (l1 != null && l2 != null) {
            // 如果 l1 当前节点的值小于等于了 l2 当前节点的值
            if (l1.val <= l2.val) {
                // 让 pre 指向节点的 next 指针指向这个更小值的节点
                // 即指向 l1
                pre.next = l1;
                // 让 l1 向后移动
                l1 = l1.next;
            }else {
                // 让 pre 指向节点的 next 指针指向这个更小值的节点
                // 即指向 l2
                pre.next =l2;
                // 让 l2 向后移动
                l2 = l2.next;
            }
            // 让 pre 向后移动
            pre = pre.next;
        }

        // 跳出循环后,l1 或者 l2 中可能有剩余的节点没有被观察过
        // 直接把剩下的节点加入到 pre 的 next 指针位置

        // 如果 l1 中还有节点
        if (l1 != null) {
            // 把 l1 中剩下的节点全部加入到 pre 的 next 指针位置
            pre.next = l1;
        }

        // 如果 l2 中还有节点
        if (l2 != null) {
            // 把 l2 中剩下的节点全部加入到 pre 的 next 指针位置
            pre.next = l2;
        }

        // 最后返回虚拟节点的 next 指针
        return dummy.next;
    }
}

玩转 LeetCode 高频 100 题系列正在更新,全系列题目和所有视频讲解可点击下方图片查看:

字节实习一面,不画图,真的想不清楚!

数组篇

1、LeetCode 283:移动零

2、LeetCode 75:颜色分类

3、LeetCode 26:删除有序数组中的重复项

4、LeetCode 88:合并两个有序数组

链表篇

1、LeetCode 876、链表的中间结点

系列介绍:LeetCode 刷多少题能进大厂面试?

☑️ ☆

我被拉黑了

我被拉黑了

每天晚上临睡前我都喜欢打开 B 站刷一会,大概由于我也是 up 主的缘故,同时发布了很多算法相关的视频,所以 B 站给我打了几个标签:程序员、LeetCode、算法。

于是每次打开 B 站首页,都能看到一些 LeetCode 相关的视频,我也会习惯性的点进去看一会,只要不是太差都会给个一键三连。

昨天晚上照常刷 B 站,首页同样推荐给我一个算法相关的视频,看了一下很不错,于是想关注后再投币以示支持。

点了一下关注,出了一个提示语,刚好有点其他事情也没看清是什么,缓过神来发现自己没关注成功,于是再点击关注,关注失败。

点击头像进入首页,出现了这样的提示。

我被拉黑了

一瞬间,我有点蒙,过了一小会我才反应过来,我被拉黑了

我开始反思,为什么会被拉黑?

我快速浏览了一下自己的投稿内容,没发布会引起争议的内容,无非就是鸽视频鸽了好几次被人骂过。

同时,我使用非登录模式进去他首页看了一下,几千粉丝,发布的内容全部都是算法相关的视频。

某种程度上,我和他应该是同行

拉黑同行有以下几个原因:

  • 1、怕对方抄袭他的内容
  • 2、被对方恶心到,瞧不起他
  • 3、不认可对方的观点,拉黑一了百了,眼不见心不烦

我猜测可能是我搞付费算法训练营的事情恶心到他了,因为我的训练营是收费的,他的视频是用爱发电。

用爱发电的往往瞧不起做知识付费的,认为他们是在割韭菜。

关于这个结论,每个人都有自己的想法,既然他选择持有这个观点,那我两三观不一致,他拉黑我,我也拉黑一下他,礼尚往来。

说到训练营的事情,我想起一件事。

去年上半年,我开始有个念头,搞算法训练营,于是找了几个搞算法相关的朋友咨询一下这件事情有没有搞头。

有一个朋友,就叫他 A 吧,很明确的和我说:2021 年才搞算法训练营没什么前景的,你千万别搞

由于他是前辈,我觉得他的眼光应该不差,再加上后面几次他都帮我分析了为什么别搞这个,我一琢磨比较合理,把这个建议听进去,搁置下来去做其它事情。

其它事情做起来都不顺,内心很躁动,还是想拥有自己的一门课,觉得有自己的产品内心才安稳。

一颗种子

趁着这股冲劲,头脑一热,我花了几万元去学习了怎么设计课程、如何做训练营、如何销售、如何售后等等这些知识。

在去年 7 月,自己的第一期算法训练营开起来了。

不懂算法,去大厂,真香!

后来因为一些事情我去联系 A 时,发现他对我有一些阴阳怪气,我以为是哪得罪他,但由于本身也是在网上认识的,我也就没去想太多。

直到一段时间后,我发现他也搞了一门算法课程,我终于懂了

我被拉黑了

☑️ ☆

【链表篇】LeetCode 876、链表的中间结点

【链表篇】LeetCode 876、链表的中间结点

通知:吴师兄学算法训练营第十期开启报名,预计 12 月 20 开营,解锁 400 题。

一、题目描述

给定一个头结点为 head 的非空单链表,返回链表的中间结点。

如果有两个中间结点,则返回第二个中间结点。

示例 1:

输入:[1,2,3,4,5]
输出:此列表中的结点 3 (序列化形式:[3,4,5])
返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。
注意,我们返回了一个 ListNode 类型的对象 ans,这样:
ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next = NULL.

示例 2:

输入:[1,2,3,4,5,6]
输出:此列表中的结点 4 (序列化形式:[4,5,6])
由于该列表有两个中间结点,值分别为 3 和 4,我们返回第二个结点。

提示:

  • 给定链表的结点数介于 1100 之间。

二、题目解析

我个人认为这道题目是最好理解快慢指针这个知识点了。

废话不多说,直接先来看动画演示!

【链表篇】LeetCode 876、链表的中间结点

根据这个动画,不难理解整体的思路如下:

1、设置两个指针,一开始都指向链表的头节点;

2、接下来,让这两个指针向前移动;

3、如果可以移动,那么就会让快指针每次移动两步,慢指针每次移动一步

4、而快指针可以移动两步的前提就是当前节点不为空,同时下一节点也不为空,这样才能保证 fast.next 有值、fast.next.next 有值

5、最后,slow 指向的就是中间节点。

三、参考代码

// LeetCode 100 题精讲:https://mp.weixin.qq.com/s/yznC53g46phq3qF7V4-obA
// 作者:程序员吴师兄
// 链表的中间结点(LeetCode 876):https://leetcode.cn/problems/middle-of-the-linked-list/
class Solution {
    public ListNode middleNode(ListNode head) {

        // 设置两个指针,一开始都指向链表的头节点
        ListNode slow = head;

        ListNode fast = head;

        // 接下来,让这两个指针向前移动
        // 如果可以移动,那么就会让快指针每次移动两步,慢指针每次移动一步
        // 而快指针可以移动两步的前提就是当前节点不为空,同时下一节点也不为空
        // 这样才能保证 fast.next 有值、fast.next.next 有值
        while(fast != null && fast.next != null){

            // 慢指针每次移动一步
            slow = slow.next;

            // 快指针每次移动两步
            fast = fast.next.next;
        }

        // 最后,slow 指向的就是中间节点
        return slow;

    }
}

玩转 LeetCode 高频 100 题系列正在更新:

【链表篇】LeetCode 876、链表的中间结点

数组篇

1、LeetCode 283:移动零

2、LeetCode 75:颜色分类

3、LeetCode 26:删除有序数组中的重复项

4、LeetCode 88:合并两个有序数组

系列介绍:LeetCode 刷多少题能进大厂面试?

🔲 ⭐

LeetCode 26:删除有序数组中的重复项

LeetCode 26:删除有序数组中的重复项

通知:吴师兄学算法训练营第十期开启报名,预计 12 月 20 开营,解锁 400 题。

一、题目描述

给你两个有序整数数组 nums1nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组

初始化 nums1nums2 的元素数量分别为 m 和 n 。

你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。

二、题目解析

设置两个索引 ij 分别指向 nums1 和 nums2 的有效元素的尾部,从它们的尾部开始向前遍历。

同时设置索引 cur 指向 nums1最末尾

LeetCode 26:删除有序数组中的重复项

在每次遍历过程中,比较 ij 指向的元素值大小,把大的元素填充到 cur 的位置,填充完毕说明那个元素已经放置在它应该放置的位置,不需要在管它了,把 cur 向前移动,同时把 i 或者 j 向前移动。

继续比较 ij 指向的元素值大小,把大的元素填充到 cur 的位置。

三、参考代码

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        // 索引从有序数组 nums1 有效元素的末端开始
        // 数组的下标索引从零开始计数
        // 索引   0    1     2
        // 数组 [ 1 ,  2  ,  3 ]
        int i = m - 1;

        // 索引从有序数组 nums2 的末端开始
        int j = n - 1;

        // 从有序数组 nums1 最末端的位置开始保存元素
        int cur = nums1.length - 1;

        // 通过循环把 num2 的元素都移动到 num1 中
        while( j >= 0  ){

            // 比较 num1 和 num2 中当前的元素大小

            // 如果 num1 中的索引位置为 i 的元素大于 num2 中索引位置为 j 的元素
            // 为了防止越界 i 必须是大于等于 0 
            if( i >=0 && nums1[i] > nums2[j] ){

             // 把 num1 中的索引位置为 i 的元素复制到索引为 cur 的位置
             // 此时 cur 的元素已经确定下来
             nums1[cur] = nums1[i];
            
             // 接下来去确定 cur 前面一个元素应该放什么数字
             cur--;
             // 此时,索引 i 需要向前移动
             i--;
             // 否则,如果 num1 中的索引位置为 i 的元素小于或者等于 num2 中索引位置为 j 的元素
            }else{
             
             // 把 num2 中的索引位置为 j 的元素复制到索引为 cur 的位置
             nums1[cur] = nums2[j];
             // 接下来去确定 cur 前面一个元素应该放什么数字
             cur--;
             // 此时,索引 j 需要向前移动
             j--;
            }
        }
    }
}

玩转 LeetCode 高频 100 题系列正在更新:

数组篇

1、LeetCode 283:移动零

2、LeetCode 75:颜色分类

3、LeetCode 26:删除有序数组中的重复项

系列介绍:LeetCode 刷多少题能进大厂面试?

☑️ ☆

加油,会越来越快的!

加油,会越来越快的!

通知:吴师兄学算法训练营第十期开启报名,预计 12 月 20 开营,解锁 400 题。

一、题目描述

给你一个 升序排列 的数组 nums ,请你原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致

由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。

将最终结果插入 nums 的前 k 个位置后返回 k

不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

加油,会越来越快的!

二、题目解析

这属于一道简单题,但还是有一些同学卡住了。

加油,会越来越快的!
图片来源于 LeetCode 26 号问题题解评论区

每个人都是从这种状态过来的,加油,会越来越快

整个操作的过程可以理解为是一个筛选的过程,即只有符合要求的元素才有资格留下来

由于数组是一个升序排列,因此重复的元素一定是相邻的,这些重复的元素只能保留一个,重复元素中剩余元素没有资格留下来,它们的位置会被后续有资格保留下来的元素覆盖掉

加油,会越来越快的!

三、参考代码

// LeetCode 100 题精讲:https://mp.weixin.qq.com/s/yznC53g46phq3qF7V4-obA
// 作者:程序员吴师兄
// 删除有序数组中的重复项(LeetCode 26):https://leetcode.cn/problems/remove-duplicates-from-sorted-array/submissions/
class Solution {
    public int removeDuplicates(int[] nums) {

        // 指针 i 进行数组遍历
        int n = nums.length;

        // 指针 j 指向即将被赋值的位置
        int j = 0;

        // 开始对数组进行遍历
        for (int i = 0 ; i < n ; i++) {

            // 进行筛选
            if ( i == 0 ||  nums[i] != nums[i - 1]) {
                // 赋值
                nums[j] = nums[i];

                // j 移动
                j++;
            }
        }

        // 获取结果
        return j ;
    }
}

玩转 LeetCode 高频 100 题系列正在更新:

数组篇

1、LeetCode 283:移动零

2、LeetCode 75:颜色分类

系列介绍:LeetCode 刷多少题能进大厂面试?

☑️ ☆

今天面试就先到这里吧,回去等通知吧!

今天面试就先到这里吧,回去等通知吧!

通知:吴师兄学算法训练营第十期开启报名,预计 12 月 20 开营,解锁 400 题。

一、题目描述

给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

我们使用整数 012 分别表示红色、白色和蓝色。

必须在不使用库的sort函数的情况下解决这个问题。

示例 1:

输入:nums = [2,0,2,1,1,0]
输出:[0,0,1,1,2,2]

示例 2:

输入:nums = [2,0,1]
输出:[0,1,2]

提示:

  • n == nums.length
  • 1 <= n <= 300
  • nums[i]012

进阶:

  • 你可以不使用代码库中的排序函数来解决这道题吗?
  • 你能想出一个仅使用常数空间的一趟扫描算法吗?

二、题目解析

这道题目有很多种解法。

但千万别做个“大聪明”,使用 sort 排序函数:

Arrays.sort(nums);
今天面试就先到这里吧,回去等通知吧!

一行代码也通过了,但面试结果就是:今天面试就先到这里吧,回去等通知吧!

今天面试就先到这里吧,回去等通知吧!

(图片来源于 LeetCode 75 号问题题解评论区

因为题目有几个限制:

  • 1、原地操作
  • 2、不能使用代码库中的排序函数
  • 3、常数级别的空间复杂度
  • 4、扫描一遍

使用上面的 sort 函数就是和面试官较劲了。。。

这道题目是非常经典的「荷兰国旗问题」,由计算机科学家 Edsger W. Dijkstra 首先提出,掌握这道题目对于后续学习快速排序三指针等知识点非常有帮助。

直接来说解法。

设置 3 个索引,left 指向数组的开始位置,right 指向数组的结束位置,index 指向数组的开始位置。

今天面试就先到这里吧,回去等通知吧!

我们让 index 从头开始向后移动,在移动的过程中,它指向的元素会出现三种情况

  • 如果 index位置上的元素值为 0,则说明是红色,要放在最前面去,此时最前面的那个元素被 left 指着,所以让 index 指向的元素和 left 指向位置上的元素进行交换,交换完毕之后,说明 0 已经在它应该在的位置,即在整个数组的左区域,所以 left 可以向后移动,index 也向后移动

  • 如果若 index 位置上的元素值为 1,则说明是白色,就应该放在中间,不用管它,继续移动 index

  • 如果 index 位置上的元素值为 2,则说明是蓝色,要放在最后面,此时最后面的那个元素被 right 指着,所以让 index 指向的元素和 right 指向位置上的元素进行交换,交换完毕之后,说明 2 已经在它改在的位置,即在整个数组的右区域,right 向前移动,但由于原先 right 指向的元素可能为 0、1、2 这三种的任何一种,到了 index 后,还需要继续观察一轮,所以 index 先不移动

三、参考代码

// LeetCode 100 题精讲:https://mp.weixin.qq.com/s/yznC53g46phq3qF7V4-obA
// 作者:程序员吴师兄
// 颜色分类(LeetCode 75):https://leetcode.cn/problems/sort-colors/
class Solution {
    public void sortColors(int[] nums) {
        
        // left  指向数组的开始的位置,它指向的位置左侧都是 0
        int left = 0;

        // right  指向数组的结束的位置,它指向的位置右侧都是 2
        int right = nums.length - 1;

        // index 指向数组的开始位置
        int index = 0;

        // index 向后移动,当它越过 right 时跳出循环,不需要再判断了
        // 因为此时说明 index 右侧的都已经是 2
        while(index <= right){

            // 获取当前的元素值
            int cur = nums[index];
            
            // 如果 index 位置上的元素值为 0
            if(cur == 0){
              // 说明是红色,要放在最前面去
              // 最前面的那个元素被 left 指着,所以让 index 指向的元素和 left 指向位置上的元素进行交换
              swap(nums,left,index);

              // index 可以向后移动
              index++;
              // left 可以向后移动,它的左侧区域都是 0
              left++;

              // 如果 index 位置上的元素值为 1
            }else if(cur == 1){
                // 说明是白色,就应该放在中间,不用管它,继续移动 index
                index++;

                // 如果 index 位置上的元素值为 2
            }else if(cur == 2){

                // 说明是蓝色,要放在最后面
                // 所以让 index 指向的元素和 right 指向位置上的元素进行交换
                swap(nums,index,right);

                // 由于原先 right 指向的元素可能为 0、1、2 这三种的任何一种
                // 交换到了 index 后,还需要继续观察一轮,所以 index 先不移动
                right--;
            }
        }

    }

    // 通过中间变量,交换两个元素的值
    // nums[i] 的值变为了 nums[j] 的值 
    // nums[j] 的值变为了 nums[i] 的值 
    private void swap(int[] nums, int i ,int j){
        // 使用临时变量 temp,保存 nums[i] 的值
        int temp = nums[i];
        
        // nums[i] 的值修改为 nums[j] 的值
        nums[i] = nums[j];

        // nums[i] 的值修改为 temp 的值
        nums[j] = temp;
    }
}

提交通过。

今天面试就先到这里吧,回去等通知吧!


玩转 LeetCode 高频 100 题系列正在更新

数组篇

1、LeetCode 283:移动零

系列介绍:LeetCode 刷多少题能进大厂面试?

🔲 ⭐

第一道完全是自己写出来的算法题!

第一道完全是自己写出来的算法题!

一、题目描述

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

示例 2:

输入: nums = [0]
输出: [0]

提示:

  • 1 <= nums.length <= 10^4
  • -2^31 <= nums[i] <= 2^31 - 1

进阶:你能尽量减少完成的操作次数吗?

二、题目解析

这题难度属于简单题,有很多小伙伴之前没有做过算法题都能第一遍独立做出来,相信你也可以的。

第一道完全是自己写出来的算法题!

如果没有头绪的话,可以看看如下的动画描述和解析。

第一道完全是自己写出来的算法题!

1、设置一个变量 slow,用来指向经过一系列操作后数组中所有为 0 元素的第一个位置上,一开始默认在索引为 0 的位置。

2、接下来,从头到尾遍历数组,遍历过程中使用变量 fast 指向对应的元素,遍历完毕之后,slow 指向了一个为 0 的元素,或者如果数组中不存在 0 ,就和 fast 一样,超过了数组的范围。

第一道完全是自己写出来的算法题!

3、在遍历过程中,如果发现访问的元素是非 0 元素,说明 slow 不在正确的位置上,需要向后移动,寻找合适的位置。

4、执行的操作就是原先 slow 的值需要被 fast 的值覆盖, slow 需要向后移动,寻找合适的位置。

5、最终遍历结束后,只需要把 slow 极其后面所有的元素都设置为 0 就行。

三、参考代码

// LeetCode 100 题精讲:https://www.algomooc.com 
// 作者:程序员吴师兄
// 移动零(LeetCode 283):https://leetcode.cn/problems/move-zeroes/
class Solution {
    public void moveZeroes(int[] nums) {

        // 设置一个变量,用来指向经过一系列操作后数组中所有为 0 元素的第一个位置上
        // 一开始默认在索引为 0 的位置
        int slow = 0;

        // 从头到尾遍历数组
        // 遍历完毕之后,slow 指向了一个为 0 的元素,或者如果数组中不存在 0 ,就和 fast 一样,超过了数组的范围
        for (int fast = 0; fast < nums.length; fast++) {

            // 在遍历过程中,如果发现访问的元素是非 0 元素
            // 说明 slow 不在正确的位置上,需要向后移动,寻找合适的位置
            if (nums[fast] != 0) {

                // 这个时候,原先 slow 的值需要被 fast 的值覆盖
                nums[slow] = nums[fast];

                // slow 需要向后移动,寻找合适的位置
                slow++;

            }
        }

        // 接下来,只需要把 slow 极其后面所有的元素都设置为 0 就行
        for (int i = slow; i < nums.length; i++) {

            // 都设置为 0 
            nums[i] = 0;

        }
    }
}

四、复杂度分析

  • 时间复杂度:O(n),其中 n 为序列长度。每个位置至多被遍历两次。
  • 空间复杂度:O(1)。只需要常数的空间存放若干变量。



本题目的视频和动画版在专栏《玩转 LeetCode 高频 100 题》可以查看。

专栏包含哪些内容呢?

1、会交付 100 道 LeetCode 高频算法原题的动画讲解分析,同时提供 Java、Python、C++ 三种编程语言的代码。

以下为课程大纲和目录

第一道完全是自己写出来的算法题!

2、每道算法题都提供动画讲解分析,相信我,哪怕是没有编程基础、纯小白、没刷过题的小伙伴都能看懂的。

第一道完全是自己写出来的算法题!

3、每行代码都有注释,不用担心看不懂!

第一道完全是自己写出来的算法题!

4、课程采取 Java 语言讲解,并提供 Java、Python、C++ 三大主流语言解法答案

更多内容请点击下方图片查看。

第一道完全是自己写出来的算法题!

🔲 ☆

LeetCode 刷多少题能进大厂面试?

先说结论,单独从算法面试角度来说,200 道热门题基本上就可以,如果数量达到 400 题就非常稳。

那问题来了,需要刷哪些热门题?怎么刷?如何最快速度的刷?

关于有哪些热门题,大家可以借助 CodeTop 这个网站进行参考,网站通过人工手动处理的方式,整理了近期会考察的热门题。

LeetCode 刷多少题能进大厂面试?

再来聊聊如何刷题。

目前市面上有不少 LeetCode 的题解,并且 LeetCode 官方也提供了不少优秀的文章。

如果你自学能力强,有耐心慢慢的看别人的文章,同时有大量时间可以投入到刷题上,那么完完全全是可以自学的

但事实上,大部分人的自学能力没有自己想象中那么强,不知道从什么地方入手。

现在有太多太多的刷题方法、刷题技巧、文章题解,但质量参差不齐,有些内容是有瑕疵或者错误的,你想去询问却得不到解答。

更重要的一点是,或许你并没有那么多的时间可以用在刷题上!

总结一下:

1、有答案都看不懂,几个小时弄不明白,怀疑自我。

2、做题没方法,解题没思路,代码能不能 AC 全靠运气。

3、麻木刷题,根本不知面试考什么,刷了 100 题结果在面试的时候发现都不考。

如果有一门这样的专栏,你觉得自己的刷题效率会是怎样?

1、文字答案难懂,视频+动画一讲就透!

2、按部就班刷题,不用像无头苍蝇一样盲目刷题!

3、现场手写代码,一行行手写代码,每一行的意思都提供解释!

4、全部都是算法面试高频题,不考察的内容坚决不加入课程体系!

确实有!

吴师兄为了能让更多的算法小白、转码初学者更好更快的学好算法,设计了一门课程:玩转 LeetCode 高频 100 题!

LeetCode 刷多少题能进大厂面试?

这个专栏课程包含如下内容:

1、会交付 100 道 LeetCode 高频算法原题的动画讲解分析,同时提供 Java、Python、C++ 三种编程语言的代码。

LeetCode 刷多少题能进大厂面试?

2、每道算法题都提供动画讲解分析,相信我,哪怕是没有编程基础、纯小白、没刷过题的小伙伴都能看懂的。

LeetCode 刷多少题能进大厂面试?

3、每行代码都有注释,不用担心看不懂!

LeetCode 刷多少题能进大厂面试?

4、课程采取 Java 语言讲解,并提供 Java、Python、C++ 三大主流语言解法答案

无论你是纯小白、没有任何编程基础的学生还是转行小伙伴都适合阅读这个专栏。

在做这个课程之前,我调研过很多培训机构,看了很多他们的大纲以及视频,我可以负责任的说,我的课程会比绝大部分培训机构要好,优点如下:

1、更加生动好学

如果你看过其它培训机构的试学内容,或者参加过他们的直播宣传课,可以发现,他们只会介绍一些算法模板给你,告诉你掌握这些模板就能刷题,不告诉你怎么理解与思考。

自己一尝试,发现果然可以通过套模板的方式把代码通过,却根本没有理解题意,也没有形成自己的思考。

在实际的课程中只丢给你一些录制好的视频和一些模板,答疑环节就交给一些兼职的助教。

但我的课程不一样,前期不提供模板,因为编程小白、算法初学者缺的根本就不是模板,而是学习算法的动力和乐趣。

课程的每一道题目均提供动画演示,无论是理解题意还是解题,均可以通过动画快速方便的理解,哪怕几个月后都能通过回忆动画的形式回忆出代码应该怎么写。

LeetCode 刷多少题能进大厂面试?

大家可以体验一下下方这个视频,听完之后是否有种感觉:自己可以独立完成这道题目,进一步,隔几天再做一遍,根据动画马上可以回忆起思路和代码

2、更加精简

LeetCode 上面目前有上千道题目,全部刷完不现实也不合理,我根据各大厂的面经抽离出了近年来最容易考察的 100 道题目,掌握这些题目足够了。

3、服务更加周到(全程都是吴师兄本人)

平时你们报的培训班,基本接触不到老师本人,老师也没有那么多时间去回复你们的信息,所以你们接触到的都是一些助手,可能还是不大懂编程的助手,只会告诉你在哪可以上课、作业在哪题解。

并且,其中很多老师、助手都是兼职,无法做到及时响应。

吴师兄不一样。

我现在已经是全职做算法训练营的状态,7 * 24 小时在线,本专栏的任何问题都可以问我,不让你的问题积压在心里。

4、价格更加便宜

市面上培训班的价格基本上都是在 3999 以上,因为他们需要花钱去宣传投放广告,成本很高。

而我自己是小本经营,不用花钱买流量。

这里,给大家做一个表格详细对比:


其它培训班 吴师兄的 LeetCode 视频讲解
时间长 一题讲解 30分钟以上,每个题多 20 分钟,200 题就是多出 4000 分钟 录制过程有意加快语速讲解,大多数题目在 10 分钟左右
题目不全 大多数讲解只是少部分,只提供模板 算法面试的高频题目全部涉及,并且还好持续更新内容
清晰程度 讲解细节有欠缺,没达到清楚明白,听一遍还是听不懂 讲解清楚明白,每一题都通过动画的形式,立志让每一个学生听懂
无关话题 讲解无关话题,甚至还会宣传介绍内部的其它课程 每题精讲,每个题目都是单独成视频录制,一题一个视频,无关话题绝不会说,压缩时间
老师风格 一题一个风格,无法刻意练习 讲师始终是吴师兄本人,风格保持一致
专业程度 不是全职负责课程 这个是吴师兄的事业,7 * 24 小时在线负责
服务时间 短则一个月,长则半年就找不到答疑的讲师 课程永久更新
价格 少则 3999,多则一两万 只需 398
LeetCode 刷多少题能进大厂面试?

Q:课程是用什么语言教学的?

算法训练营主要以 Java 语言教学,每道算法题都是采取动画讲解思路+手写 Java 代码的形式,每个视频、每道算法题都会提供文字版,在文字版里面有 Python、C++、Java 这三种主流语言的实现,代码实现的逻辑和视频动画讲解完全符合,即动画可以看明白、代码也能看明白,同时每一行代码均会提供中文注释。

Q:我是转专业 & 零基础,可以参加嘛?

完全可以!

这门课就是针对于转专业 & 零基础的同学,因此每道算法题我都采取动画讲解的方式,就是希望初学者也能看懂。

Q:每周需要投入多少时间来学习?

整个课程包含 100 道个视频,每个视频的时长平均在 10 分钟左右,大家可以结合自己的学习情况自由安排。

Q:有没有试听的内容?

有的,登录之后即可试听部分内容。

Q:这门课程对比其他课程有什么优势?

1、相比较市面上多数的课程,本课程的课时量、课程时长是它们的两倍以上,并且在不断迭代补充。

2、相比较市面上多数的课程,由于本课程不存在推广营销费用,价格很低。

Q:课程视频的观看期限是多久?

课程有效期 5 年内有效。

Q:可以跟老师互动交流吗?

课程的研发和答疑均是吴师兄本人全程负责,所以课程中遇到任何问题都可以私聊或者群里问我。

Q:报名缴费后可以退款吗?

不可以。

所以,请确定好再报名,报名成功后即会马上解锁全部的内容

Q:购买链接在哪里?

LeetCode 刷多少题能进大厂面试?

🔲 ☆

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

上大学后,老师不再像高中那样无微不至,自学成了家常便饭。

翻遍各大网站,浏览各式文章,混迹各种学习交流群。有时仅仅只为寻找一份合适的学习资料,为此浪费不少的时间。经常会为了寻找合适的学习资料而苦恼。真的,我累了!

想必,你也有这样的烦恼吧?

很多博主也会为了吸引粉丝关注,分享一些自己收集的资料。但是大多都是零散的,不成系统的。终究非长久之计!

为此,我成立了“大学百科资料”,系统地整理大学四年所需的大量资料,包括资料、网课、工具、方法等。真诚地与大家分享!消灭找资料中的痛苦,帮助大家更好的学习!也许,它将成为你大学学习过程中的宝藏!

在过去一年时间里,我们花了很长时间收集、整理了一份超全的期末复习资料。帮助了上万同学进行期末复习,大家不仅收获了超多的精华复习资料,还收获了一个学习交流的空间。

(太长不看提示:滑到最后即可查看获取全套复习资料的方式

目前整理好的资料主要为:基础公共课,理工类专业课,经管类专业课,医学类专业课,法律类专业课、农林牧类专业课、文史类专业课、教育心理类专业课等海量大学生复习资料。

(2022.10.1更新:目前已收集300+科资料。各大专业课都已经上传了许多资料,每周仍在持续更新资料中…)

数量上已经有几千份文档,而且每一份资料我们都会亲自过目,精心整理,在这个过程中花费了大量的时间、精力,保证数量的同时,也在不断追求更高的质量,价值极高!

下面是已经整理好的部分资料的目录:

01基础公共课

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

一共有10+科,几乎是大家都要学的科目,包括但不局限于以下目录。每一科都精心整理,文件大概有100个左右,压缩后大小接近1G内有每门科目的精华知识点总结,公式定理总结,丰富的题库,大部分科目还有思维导图跟教材的课后习题答案!

目录

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

  • 高数

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

  • 大学物理

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

  • 概率论

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

  • 近代史纲要

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

  • 马原

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

02 理工类专业课

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

一共有100+门科目,涵盖了绝大多数理工科的专业课程,包括但不局限于以下目录,共600多个PDF和word文档,内有每门科目的精华知识点总结,公式定理总结,丰富的题库,部分科目还有思维导图和教材的课后习题答案!

目录

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

  • 工程制图

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

  • 数据结构

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

  • 通信原理

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

  • 离散数学

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

  • 模电

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

  • 数电

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

03 经管类专业课

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

一共有70+科包括但不局限于以下目录。共400多个PDF和Wrod文档,内有每门科目的精华知识点总结,公式定理总结,丰富的题库,部分科目还有思维导图跟教材的课后习题答案!涵盖了大部分经管类的科目!

目录

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

  • 管理学

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

  • 微观经济学

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

  • 宏观经济学

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

  • 国际经济学

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

  • 财务与管理

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

  • 西方经济学

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

04 医药护类专业课

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

一共有70+科包括但不局限于以下目录,400多个PDF和Word文档,内有每个科目的重要知识点,考点、题库等,部分科目还有教材的课后习题答案!目前医学类同学需求量最大的资料都整理了!

目录

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

病理生理学

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

医学免疫学

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

医学影像学

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

遗传学

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

中医基础理论

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

05 法学类专业课

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

一共有30+科包括但不局限于以下目录,共150多个PDF和Word文档,内有每个科目的精华知识点,重要考点、题库等,部分科目还有教材的课后习题答案!法学类科目较少,目前还在持续整理更新中!

目录

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

法律逻辑学

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

法学导论

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

法学概论

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

行政法学

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

06 农林牧专业课

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

一共有20+科包括但不局限于以下目录。共100多个PDF和Word文档,内有每门科目的精华知识点总结,定理总结,丰富的题库,部分科目还有思维导图跟教材的课后习题答案!涵盖了大部分农林牧类的科目!

目录




最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!




家畜环境卫生学

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

兽医传染病学

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

动物生理学

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

兽医病理学

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

07 文史类专业课

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

一共有20+科包括但不局限于以下目录。共100多个PDF和Word文档,内有每门科目的精华知识点总结,重点内容汇总,丰富的题库,部分科目还有思维导图跟教材的课后习题答案!涵盖了大部分文史类的科目!

目录




最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!




大学美育

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

外国文学史

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

中国古代文学

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

应用文写作

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

08 教育、心理类专业课

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

一共有10+科包括但不局限于以下目录。共100多个PDF和Word文档,内有每门科目的精华知识点总结,重点内容汇总,丰富的题库,部分科目还有思维导图跟教材的课后习题答案!教育、心理类科目较少,目前还在持续整理更新中!

目录




最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!




大学心理健康

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

社会心理学

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

心理测量学

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

部分资料详情展示

如上所示,目前基础公共课,理工类、经管类、法学类、医学类、农林牧类、文史类、教育心理类已整理超过300科资料而且还在持续不断更新中…

以下是部分资料内容的截图:

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

高数详细的知识点和重要公式的汇总

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

C语言重要概念及对应例题

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

大物详细知识点及重要公式汇总

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

马原思维导图

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

毛概简答题汇总

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

模电基础试题汇总

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

管理学考试重点整理

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

微观经济学公式总结

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

宏观经济学题库及答案

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

汉语名词解释

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

市场营销学重点整理

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

医学影像学复习重点整理

获取方式


目前将所有整理好的资料上传到资料群文件中。

这样方便大家下载资料,也方便我们后续更新、同步更多的资料!

还为同学们提供了一个交流学习的空间!

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

资料群群文件目录

如何进入资料群?

扫描下方二维码

支付19.99元后即可加入群聊

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

为什么设置付费?

过往,也尝试过免费分享所有资料,但是换来的却是资料群广告满天飞,白嫖党无穷无尽的索取!

为了管理资料群浪费了太多的时间,没有时间去更新更多的资料。

也极难为同学们创造出一个良好的学习氛围!当然我也会因此收获一定的利润,也非常感谢你对我整理资料的几百个小时的辛苦成果的

群里有超过300+科目的资料,算下来平均每科资料仅不到7分钱,即使对你有用的只有十分之一,那么一科资料也不到7毛!同时每一科资料都价值极高,也收获群友大量的好评!

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

群友自发真实评论

后期还会不断更新教材课后答案、大创比赛、考证考研等资料包,随着资料的更新、内容的丰富不断涨价,早就是优势(预计涨价至100元)。

入群福利

1

后续会免费更新很多资料,比如英语四六

2

最后想要进群的同学

支付19.99元后即可获取进群密码

已有超过20000+大学生加入!

聊学习,交朋友,为你的学习保驾护航!

我们在大学百科资料群等你!

最全期末考试精华资料大全!超两百门课程复习资料,内容太多,赶紧点赞收藏!

❌