赞
踩
C++ 实现 180 多个算法和数据结构
下载下来,可以学习。
中国互联网公司本质上是广告公司,赚取整个经济的钱。和软件公司不一样,软件公司卖软件。凭本事吃饭,在中国凭本事吃饭都要饿死的。所以搞技术一定要进互联网公司。
互联网公司才能给出百万年薪,才有高深技术的实验场景。
对于IT专业的学生来说,提高算法能力是非常重要的,因为算法是计算机科学的核心组成部分,并且在互联网公司中尤其受到重视。以下是一些建议,可以帮助学生提高他们的算法能力:
掌握基础知识:
深入理解数据结构和算法的基本原理,如数组、链表、栈、队列、树、图等。
学习并理解各种排序和搜索算法,如快速排序、归并排序、二分搜索等。
了解算法复杂度分析(时间复杂度和空间复杂度)。
刷题实践:
在在线平台(如LeetCode、LintCode、HackerRank等)上解决算法问题。
参与编程竞赛和算法挑战,如ACM/ICPC、CodeChef、TopCoder等。
定期为自己设定目标,例如每周解决一定数量的新问题。
参加课程和研讨会:
参加在线课程,如Coursera、edX、Udemy等提供的算法和数据结构课程。
参加学校或社区的研讨会和讲座,与专家和行业人士交流。
阅读和理解优秀代码:
阅读开源项目中的算法实现,理解其工作原理。
学习优秀程序员编写的代码,理解他们的思维方式和代码风格。
实际项目应用:
在个人项目或课程项目中实际应用算法,解决实际问题。
参与需要算法技能的实习或项目工作,获得实际工作经验。
持续学习和自我挑战:
保持对新算法和技术的关注,不断学习新知识。
挑战自己,尝试解决更难的问题,不断提高自己的算法设计和优化能力。
交流和合作:
加入学习小组或社区,与他人一起讨论和解决问题。
通过社交媒体、技术博客、论坛等渠道与其他算法爱好者交流心得。
提高算法能力需要时间和坚持。通过不断的实践和挑战自己,IT专业的学生可以逐步提高自己的算法能力,并为进入互联网公司或其他相关领域打下坚实的基础。
问题 | 解决方案 |
---|---|
找到链表中倒数第n个节点。 | nthToLastNode.cpp , nth_to_last_node.py |
添加数字,其中数字的每个数字都由链表的节点表示。以链接列表的形式给出输出。 | add_two_numbers_lists.cpp , add_two_numbers_list.py |
交换链表的节点而不交换数据。 | swapNodesWithoutSwappingData.cpp、swap_nodes_without_swapping_data.py |
以迭代和递归方式反转链表 | verseLinkedListIterAndRecurse.cpp、reverse_linkedlist.py |
给定一个链表,反转备用节点并在末尾追加。 | 反向替代节点.cpp |
仅给定一个节点指针,从链表中删除该节点。 | 删除节点.cpp |
删除整个链表。 | 删除链表.cpp |
打印链表的中间节点而不迭代两次。 | 打印MiddleNode.cpp |
确定链表是否是回文。 | listPallindrome.cpp |
将数据插入已排序的链表中。 | insertInASortedLinkedList.cpp |
确定两个给定链表的交集(合并)点。 | findIntersectionPointOfLists.cpp,intersection_of_lists.py |
克隆一个具有 next 和一个随机指针的链表,空间复杂度 - O(1)。 | cloneListWithRandomPtr.cpp、clone_list_with_random_ptr.py |
给定一个包含重复项的排序链表,在一次迭代中删除重复项。 | 从排序列表中删除重复项.cpp |
使用Floyd的环路查找算法,检测链表是否包含环路,如果包含环路,则删除环路 | floyedCycleDetection.cpp |
使用归并排序对链表进行排序 | merge_sort.cpp |
给定一个单链表 L 0 -> L 1 -> … -> L n-1 -> L n。重新排列列表中的节点(就地),使新形成的列表为:L 0 -> L n -> L 1 -> L n-1 -> L 2 -> L n-2 .... | 重新排列列表.cpp |
Include 包含数据结构和一些算法的单个标头实现。
数据结构/算法 | 执行 |
---|---|
通用宏和算法,如交换、随机数生成 | 通用.h |
通用堆栈实现 | 堆栈.h |
通用队列实现 | 队列.h |
通用列表实施 | 列表.h |
二叉搜索树的实现 | 二叉搜索树.h |
快速排序的实现 | 快速排序.h |
归并排序的实现 | 合并排序.h |
选择排序的实现 | 选择排序.h |
冒泡排序的实现 | 冒泡排序.h |
Linux内核双链表实现 | 双链表.h |
通用图实现(邻接表) | 图.h |
堆排序的实现 | 堆排序.h |
我自己的字符串库实现 | pstring.h pstring.cpp |
问题 | 解决方案 |
---|---|
判断一个数是否是2的幂。 | power_of_2.cpp |
添加两个表示为字符串的二进制数。 | addBin.cpp |
确定给定数字的下一个 2 的幂。 | next_power_of_2.cpp |
使用位操作确定数字是否是 3 的倍数。 | multiple_of_3.cpp |
确定机器的字节顺序,以相反的字节顺序打印一个数字。 | 反向字节序.cpp |
求给定数的奇偶性。 | 查找奇偶校验.cpp |
使用位操作实现数字与 7 的快速乘法。 | 乘以7.cpp |
反转无符号整数的位(两种方法 - 逐位反转和分而治之)。 | 整数的反向位.cpp |
用于确定给定整数中最右边设置位的位置的小函数。 | right_most_set_bit.cpp |
给定一个数字向量,只有一个数字出现奇数次,求该数字。 | find_odd_one_out.cpp |
给定两个整数,确定它们的和是否会整数溢出。 | 整数溢出.cpp |
将数字 A 转换为 B 需要多少位翻转操作。 | countNumberOfBitFlips.cpp |
给定数字 x 和 x 的二进制表示形式的两个位置(从右侧开始),编写一个函数,在给定的两个位置处交换 n 个右位并返回结果。还假设两组比特不重叠。 | 交换位集.cpp |
不使用任何算术运算符将两个数字相加 | addition_without_operators.cpp |
路易丝和理查德玩游戏。他们将计数器设置为 N。路易丝获得第一个回合,此后回合交替。在游戏中,他们执行以下操作:
| 计数器游戏.cpp |
确定两个整数是否符号相反。 | check_opposite_signs.cpp |
交换给定整数的位置 p 和 q 处的两位。 | 交换位.cpp |
检查一个数是否是4的幂。 | check_if_power_of_4.cpp |
问题 | 解决方案 |
---|---|
问题 1-1:第 6 版:编写一个算法来确定字符串是否具有唯一字符。我们可以在不使用额外数据结构的情况下做到这一点吗? | 1-1-hasUniqueChars.cpp , 1-1-hasUniqueChars.py |
问题 1-2:第 5 版:当您传递一个以 null 结尾的 C 字符串时,反转字符串。 | 1-2-edi5-reverseString.cpp |
问题 1-2:第 6 版:给定两个字符串,确定一个字符串是否是另一个字符串的排列。 | 1-2-perm-strings.cpp , 1-2-perm-strings.py |
问题 1-3:第 5 版:编写一个算法来删除字符串中的重复字符。 | 1-3-edi5-removeDuplicates.cpp |
问题 1-3:第 6 版:URLify:将字符串中的所有空格替换为“%20”。最好就地 | 1-3-URLify.cpp |
问题 1-4:第 6 版:给定一个字符串,编写一个函数来检查它是否是回文排列。 | 1-4-回文排列.cpp |
问题 1-5:第 6 版:可以对字符串执行三种可能的编辑 - 插入字符、删除字符、替换字符。给定两个字符串,确定它们是 1 编辑还是 0 编辑。 | 1-5-one-edit-away.cpp |
问题 1-6:实现一种执行基本字符串压缩的方法。示例字符串aabcccccaaa应压缩为a2b1c5a3,但是如果压缩字符串大于原始字符串,则返回原始字符串 | 1-6-字符串压缩.cpp |
问题1-7:将矩阵顺时针(&逆时针)旋转90度 | 1-7-矩阵旋转.cpp |
问题 1-8:编写一个算法,如果 MxN 矩阵的某个元素为 0,则其整个行和列都设置为 0。 | 1-8-零矩阵.cpp |
问题 1-9:给定两个字符串 s1 和 s2,只需调用一个函数来确定 s2 是 s1 的旋转,该函数检查一个字符串是否是另一个字符串的旋转。 | 1-9-字符串旋转.cpp |
问题 2-1:从未排序的链表中删除重复项。如果不允许临时缓冲区怎么办? | 2-1-删除-dups.cpp |
问题 2-2:从单链表的最后一个节点确定第 k个节点。(迭代和递归方法) | 2-2-kthToLast.cpp |
问题2-3:实现删除单链表中间节点的算法 | 2-3-删除-中间节点.cpp |
问题 2-4:围绕值 x 划分链表,所有小于 x 的节点都位于所有大于等于 x 的节点之前 | 2-4-分区.cpp |
问题 2-5:有两个由链表表示的数字,其中每个节点包含一个数字。这些数字以相反的顺序存储,使得 1 的数字位于列表的开头。编写一个函数,将两个数字相加并以链表形式返回总和。示例:
| 2-5-添加列表.cpp |
问题2-6:判断链表是否是回文(2次迭代和1次递归方法) | 2-6-回文.cpp |
问题2-7:判断两个单链表是否相交,如果相交,则返回相交节点。交集是根据参考而不是值定义的 | 2-7-交叉点.cpp |
问题2-8:检测链表是否有环,找到环的起始节点并去除环 | 2-8-循环检测.cpp |
原文链接:
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。