网友:新虎城
程序员学习算法时,建议先从以下几个方面开始:
1. 基础算法学习:学习算法基础知识,如排序、查找、哈希、树、图等基本算法。可以通过看相关书籍和视频,参加相关课程和学习群,或者参考网上的相关博客或论文进行学习和实践。
2. 练习算法实现:学习一个算法后,应该通过编写代码来实现和练习这个算法。可以在LeetCode、洛谷、CodeForces等OJ平台上练习算法实现。
3. 多思考和交流:练习算法的过程中,遇到问题应该及时记录问题、思考答案并与他人交流,以便更好地理解和掌握算法。
4. 刷题和做题:刷题是学习算法中的重要方式,可以在OJ平台找到大量的题目进行练习,提升算法实现能力和效率。
5. 参加比赛:加入编程比赛和算法竞赛,可以提供更好的学习和交流环境,进一步加深对算法的理解和掌握。常见的比赛包括ACM/ICPC、Google Code Jam等。
总之,学习算法需要有耐心、细心,需要多加练习和思考,遇到问题应该及时与他人交流和讨论。不断地学习和提高自己的能力,才能更好地应对未来的编程工作和挑战。
网友:胖子随感
把自己变笨,要进入计算机的世界,每次只能进行一步计算。最难的算法都是需要迭代理解,比如链表逆转,如果空间足够大,可以把所有链条断开并且都保存起来,用递归:头部的指针直接给临时指针,临时指针变头部指针继续循环,直到找到尾部的指针,然后头尾交换,完成转换。
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;
}
网友:勇哥java实战分享
其实你我都心知肚明,除非特殊场景,在中国的 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 题解
网友:天涯学馆
首先基础知识要牢固
基础知识包括数学基础,计算机基础;数学基础研究生以前的数学都是基础数学,严谨的数学逻辑思维。计算机基础包括计算硬件知识,计算机网络知识,计算机软件知识。
其次编程技术要牢固
最起码要擅长两三门编程语言技术,熟悉他们底层开发逻辑原理,熟悉常见的数据结构和算法。
算法研究
熟练使用常见的各种算法,不但学习和研究新的算法逻辑,从开源算法研究中归纳总结和改进提出自己的意见。
网友:数理土豆饼
我的经验,动态演示网站,看每种算法运行过程的动态过程,比纯粹看书,理解的快的多,先搞清楚设计算法的目的,运处,看了动态演示 以后,再通过文字叙述和程序 理解算法的实现细节。另外 普林斯顿大学 cos 226 课程 的在线 ppt ,也写的非常好,内容丰富,可以帮助和加深理解。比如他在说明算法渐进复杂度时,说了一个,1000个数,计算所有三个数组合和等于0的个数的例子,这个一般教材没有,促使人思考。某些教程 作者 自己也 没有理解到位,把简单的事情,叙述的难懂了