[摘要]程序员是怎么学习算法的?程序员学习算法时,建议先从以下几个方面开始:1 基础算法学习:学习算法基础知识,如排序、查找、哈希、树、图等基本算法。可以通过看相关书...
程序员是怎么学习算法的?
程序员学习算法时,建议先从以下几个方面开始:
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;
}