美文网首页
【tip】刷编程题常用经验总结

【tip】刷编程题常用经验总结

作者: papi_k的小茅屋 | 来源:发表于2024-02-13 12:10 被阅读0次

1.解题没有思路时候,可以先排个序看看。

2.建议平时在自己的路径下记录常用的数据结构,时常复习,在考试时候可以直接套用。

3.一个时间复杂度为T(n)的算法是否超时,考试要求程序执行时间小于1s,考试机器大约执行10^9次/s运算。

如果程序的计算次数超过10^9,可能超时

如果程序的计算次数超过10^10,基本肯定超时

例:

若n=10^6,则n^2超过限制,只能采用O(nlogn)时间复杂度的算法。

若n=10^4,则n^2没超过限制,可以采用O(n^2)时间复杂度的算法。

考试的数据规模决定了能通过的算法复杂度:

10^6~10^7,说明要设计一个O(n)的算法。

5*10^4~10^5,说明要设计一个O(nlogn)的算法,要把数据规模不断折半处理的方式解决。

10^3,说明可以用O(n^2)时间复杂度的算法解决。

10^2,说明可以用O(n^3)时间复杂度的算法解决。

4.动态规划有个关键点:选或者不选。

5.一般谈到最短路径的问题,可以考虑BFS。

广度优先搜索需要借助队列来实现,遍历得到的路径就是,起始顶点到终止顶点的最短路径。深度优先搜索用的是回溯思想,是借助栈来实现的,非常适合用递归实现。

6.递归、回溯、DFS三个词不太一样,回溯可以理解为就是DFS。

递归:代码结构,自己调用自己;(递归函数下,就是回溯的逻辑)

回溯:算法思想,穷举搜索尝试;(回溯其实是一个暴力搜索算法,并非是高效的算法)

DFS:深度优先遍历,Depth-First-Search。

7.学习数据结构最难的不是理解和掌握原理,而是能灵活地将各种场景和问题抽象成对应的数据结构和算法。

例如,迷宫可以抽象成图(如何在计算机中存储一个迷宫?),走迷宫可以抽象成搜索算法。

8.学习别人优秀的代码是提升自己代码水平的最快方式。

9.LeetCode的前400题非常经典,可以考虑反复刷。

10.不要copy代码,尽量都手工敲代码,形成肌肉记忆。

11.注意判断整数乘积结果是否超int范围。

12.读题解,要融会贯通,学好别人的思路后,自己实现。

13.万变不离其宗,想方设法将复杂的问题简单化,用简单的方法去解决。

14.负数如何正确取余数呢? 正负数情况都包含了,结果key即为余数。int key = (temp / k + k) % k;


yo peace!

相关文章

网友评论

      本文标题:【tip】刷编程题常用经验总结

      本文链接:https://www.haomeiwen.com/subject/gkxiwdtx.html