• 个性签名
  • 格言大全
  • 名言大全
  • 笑话大全
  • 知识问答
  • 生活家居
  • 星座运势
  • 宝宝起名
  • 休闲爱好
  • 百科大全
  • 程序员是怎么学习算法的(程序员怎么学?)

    栏目: 知识 日期:2023-04-22 08:00:41 浏览量(来源:小邵

    [摘要]程序员是怎么学习算法的?其实你我都心知肚明,除非特殊场景,在中国的 IT 环境里,大多数场景下,学习算法的目的在于通过笔试算法题。但算法书林林总总,有时候乱花渐...

    程序员是怎么学习算法的?

    其实你我都心知肚明,除非特殊场景,在中国的 IT 环境里,大多数场景下,学习算法的目的在于通过笔试算法题。

    但算法书林林总总,有时候乱花渐欲迷人眼。

    杜甫有诗云:读书破万卷,下笔如有神。不管选择哪本书,只要深入学习,分层次,逐层进阶,一定可以将算法攻克。

    笔者强烈推荐一个 Github 开源项目 LeetCode-Go,你不仅可以把他当做一本开源算法书,也可以当做一个学习和交流的平台。

    1 项目简介

    github 地址:https://github.com/halfrost/LeetCode-Go

    作者写算法书的目的很利他:

    刷题刷了一年了,想和大家分享分享一些做题心得,解题方法。想和有相同爱好的人交个朋友,一起交流学习。对于自己来说,写题解也是一种提高。把一道深奥的题目讲给一点都没有头绪的人,并能让他完全听懂,很能锻炼人的表达能力。在讲解中很可能还会遇到听者的一些提问,这些问题可能是自己的知识漏洞,强迫自己去弥补。笔者在公司做过相关的分享,感受很深,双方受益都还不错。

    2 便于阅读

    离线版本的电子书《LeetCode Cookbook》PDF Download here

    通过 iOS / Android 浏览器安装 PWA 版《LeetCode Cookbook》至设备桌面随时学习

    3 图书目录

    为了让读者一步步学习,作者将图书分为四个部分:

    1、序章:算法的基础知识(数据结构知识 & 算法知识 & 时间复杂度)

    2、算法专题

    3、一些模版

    4、LeetCode 题解

    程序员是怎么学习算法的?

    把自己变笨,要进入计算机的世界,每次只能进行一步计算。最难的算法都是需要迭代理解,比如链表逆转,如果空间足够大,可以把所有链条断开并且都保存起来,用递归:头部的指针直接给临时指针,临时指针变头部指针继续循环,直到找到尾部的指针,然后头尾交换,完成转换。

    public Node reverseList(Node node) {

    if(node.next == null) {//当最后一个节点的时候返回return node;

    }

    Node temp = node.next;//得到当前节点的下一个节点

    Node returnNode = reverseList(temp);

    temp.next = node;//下一个节点的下一个节点为当前节点实现逆转

    node.next = null;//实现逆转前链表的头结点为为节点

    return returnNode;//返回逆转后的链表的头节点

    }

    如果没有大空间,就需要头指针自己迭代,保存头部的指针,头部的指针变头头部指针(第一次为尾部空),头头部指针变头指针,头指针变头部指针,这一轮结束,下轮开始,直到末尾。

    public Node reverseList2(Node node) {

    Node frontNode = null;//头结点逆转的时候前一个节点为null

    Node headNode = node;//当前节点为头节点

    Node tempNode;//临时变量保存下一个节点while(headNode != null) {

    tempNode = headNode.next;

    headNode.next = frontNode;//实现逆转

    frontNode = headNode;

    headNode = tempNode;

    }

    return frontNode;

    }

    上一页12下一页