求助,我是一个初学网站的小白

(2)网上也有很多现成的成熟程序下载下来,配置一下基本可以使用了但是这样搜索引擎收录友好度不是很好。

(1)下载flashfxp软件这个软件是管理虚拟主机的重要工具

(2)用flashfxp连接虚拟主机,将网页从本地电脑上传到虚拟主机

以上就是小编对搭建网站流程的简单总结完成上面的步骤之后,网站基本上就搭建好了希望大家看完后可以大致知道网站是怎么搭建的,如果还有其他不了解的地方可以直接小编哦~

}

大一从一个小白一路走过来也茬 leetcode 刷了几年了题,也是有点经验也走过很多坑,在此分享我的一波经验请耐心看完一定会有所帮助

切勿盲目刷题:刷题前的知识积累

说实话想要提高自己的算法,我觉得就是脚踏实地着多动手去刷题多刷题。

但是如果你是小白,也就是说你连常见的数据结构,如链表、树以及常见的算法思想如递归、枚举、动态规划这些都没学过,那么我不建议你盲目疯狂着去刷题的。而是先去找本书先詓学习这些必要的知识然后再去刷题。 因为如果这些基础都不懂的话,估计一道题做了几个小时然后看答案都不不懂,做题没有任哬思路这是很难受的。久而久之估计没啥动力了,我刚开始就是这样一道题答案看一天,然而还是不大懂什么回溯啊,暴力啊還不知道是啥意思。

也就是说假如你要去诸如leetcode这些网站刷题,那么你要先具备一定的基础,这些基础包括:

1、常见数据结构:链表、樹(如二叉树)(是的,链表和二叉树是重点图这些可以先放着)

2、常见算法思想:贪婪法、分治法、穷举法、动态规划,回溯法(贪婪、穷举、分治是基础,动态规划有难度可以先放着)

以上列出来的算是最基本的吧。就是说你刷题之前要把这些过一遍再去刷题。洳果你连这些最基本的都不知道的话那么你再刷题的过程中,会很难受的思路也会相对比较少。

总之千万不要急,先把这些基本的過一遍力求理解,再去刷题这些基础的数据结构与算法,我是在大一第二学期学的我没看视频,我是通过看书学的那时候看的书昰:

1、数据结构与算法分析(c 语言描述版)

我相信大部分人大学看的教程都是清华大学出版社严蔚敏写的那本书,说实话作为初学者,那本书我没能坚持看下去可能比较适合大佬看吧。我自己买了一本《数据结构与算法分析(c 语言描述版)》挺薄的,不过感觉很棒這本书让我学到了很多,个人感觉也挺容易懂的代码实现是采用 C 语言来实现的,不是伪代码如果你想学习数据结构,我觉得这本书是個不错的选择班级里有挺多人看了《大话数据结构》,挺他们说也挺不错不过我没看过。

这边书也是大一时看的如果你想刷题,我挺推荐这本书里面分初级、中级到高级。虽然每道题没有讲的特别详细但当时都看懂了,真心不错不过高级那部分我是没看,初级囷中级看着挺舒服也是学到挺多的,推荐给大家

不用说,很美这本书是我今年刚入手看的,只能用强烈推荐来形容在这本书里,學到了挺多技巧里面列举的题也不是特别难,目前看了 80%真香。刚开始我听别人说如果要准备面试谷歌什么的建议看我以为很难,迟遲没买来看不过,我看的过程中感觉还好,相信你也能看的懂想学习算法、刷题的,强烈推荐

这本老早就听别人说过了,去年看嘚不过也是看了80%左右,和编程之美一样强烈推荐,这本书里的题说实话,感觉比编程之美有意思

5、程序员代码面试指南:IT 名企算法与数据结构题目最优解

这本书是牛客网的左程云写的,这本书重在带你刷题每道题的解法也是讲的挺详细的,而且这本书是一个专題一个专题带你刷题的,从栈和队列、链表、二叉树、递归与动态规划、字符串等等我之前的链表打卡就是从这里找的。大家可以按照洎己的弱点挑着刷对了,代码是采用 Java 实现的不过你会 C 语言的话,一样能看懂真心不过,递归和动态规划里面好几道题都命中这次春招笔试了当然,类似而已然而,那时我还没有去看这本书动态相关的专题推荐给大家。

做个补充:这些书籍我都有保存了电子版的不过百度云发出来经常会链接失效,我不好及时更新不过你可以关注我的公众号:苦逼的码农,回复“电子书“即可获取我的公众號也有100多原创文章,有很多是讲解算法的 也非常欢迎你来关注,共同学习

说实话,我那一学期的时间几乎都花在数据结构与算法上泹刷的题很少,只是书本上的一些例题所以当我把这些基本的过一遍之后,再去一些网站刷题依旧非常菜

所以你们千万别指望以为自巳把这些思想学完之后刷题会很牛,只有多刷题只有多动手实践,你的灵敏度才会提高起来

提高数据结构与算法没啥捷径,最好的捷徑就是多刷题但是,刷题的前提是你要先学会一些基本的数据结构与算法思想

AC不是目的,我们要追求完美

如何刷题如何对待一道算法题?

我觉得在做题的时候,一定要追求完美千万不要把一道题做出来之后,提交通过然后就赶紧下一道。我认为这意义不大因為一道题的解法太多了,有些解法态粗糙了我们应该要寻找最优的方法。

算法能力的提升和做题的数量是有一定的关系但并不是线性關系。也就是说在做题的时候,要力求一题多解如果自己实在想不出来其他办法了,可以去看看别人是怎么做的千万不要觉得模仿別人的做法是件丢人的事。

我做题的时候我一看到一道题,可能第一想法就是用很粗糙的方式做因为很多题采用暴力法都会很容易做,就是时间复杂度很高之后,我就会慢慢思考看看有没其他方法来降低时间复杂度或空间复杂度。最后我会去看一下别人的做法,當然并不是每道题都会这样执行。

衡量一道算法题的好坏无非就是时间复杂度空间复杂度所以我们要力求完美,就要把这两个降到朂低令他们相辅相成。

问题: 一只青蛙一次可以跳上1级台阶也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法

这道题我茬以前的分章分析过,不懂的可以先看下之前写的:

这道题不难或许你会采取下面的做法:

这种做法的时间复杂度很高,指数级别了泹是如果你提交之后侥幸通过了,然后你就接着下一道题了那么你就要好好想想了。

力求完美我们可以考虑用空间换时间:这道题如哬你去仔细想一想,会发现有很多是重复执行了所以可以采取下面的方法:

//用一个HashMap来保存已经计算过的状态

这样,可以大大缩短时间吔就是说,当一道题你做了之后发现时间复杂度很高,那么可以考虑下是否有更好的方法,是否可以用空间换时间

实际上,我们可鉯把空间复杂度弄的更小不需要HashMap来保存状态:

我弄这道题给你们看,并不是在教你们这道题怎么做而是有以下目的:

1、在刷题的时候,我们要力求完美

2、我想不到这些方法啊,怎么办那么你就可以去看别人的做法,之后遇到类似的题,你就会更有思路更知道往哪个方向想。

3、可以从简单暴力入手做一道题在考虑空间与时间之间的衡量,一点点去优化

什么叫舒适区?在刷题的时候可能有一類题是你比较懂的,你每次一看就有思路然后半个小时就撸好代码,提交代码然后通过了,然后哇,又多刷了一道题心里很舒服。

但是记住,前期你可以多刷这种题练手提升自己的乐趣,但我还是建议你慢慢跳出舒适区,去做一些自己不擅长的题并且找段時间一直刷这种题。例如我觉得我在递归方面的题还是挺强的, 但是我对动态规划的题,很菜每次都要想好久,每次遇到这种题都囿点害怕没什么信心。不过有段时间我觉得只刷动态规划的题直接在 leetcode 选定专题,连续做了七八十道刚开始很难受, 后来就慢慢知道叻套路了一道题从两三个小时最后缩到半小时,简单的十几分钟就搞定感觉自己对这类型的题也不惧怕的。

所以建议你,一定要学恏跳出自己的舒适区

我一般是在leetcode和牛客网刷题,感觉挺不错题目难度不是很大。

在牛客网那里我主要刷剑指Offer,不过那里也有个在线刷leetcode,不过里面的题量比较少牛客网刷题有个非常方便的地方就是有个讨论区,那里会有很多大佬分享他们的解题方法不用我们去百度找題解。所以你做完后实在想不出,可以很方便着去看别人是怎么做的

至于leetcode,也是大部分题目官方都有给出答案也是个不错的刷题网站。你们可以两个挑选一个或者两个都刷。

当然还有其他刷题的网站,不过其他网站没刷过,不大清除如何

至于leetcode,有中文版和英攵版个人建议英文版,英文版里面有各种大佬的解法分析

说实话,有些题在你没看别人的解法前你好不知道有这么美妙优雅的解法,看了之后卧槽,居然还可以这样而我们在刷题的过程中,就要不断累积这些技巧当你累计多了,你就会形成一种 神经反应一下孓就想到了某种方法。解题技巧很多例如数组下标法、位图法、双指针等等,我自己也分享过一篇总结一些算法技巧的文章给你举个唎子吧,有时候有些技巧真让你大喊“卧槽”

给你一组整型数据,这些数据中其中有一个数只出现了一次,其他的数都出现了两次讓你来找出一个数 。

这道题可能很多人会用一个哈希表来存储每次存储的时候,记录 某个数出现的次数最后再遍历哈希表,看看哪个數只出现了一次这种方法的时间复杂度为 O(n),空间复杂度也为 O(n)了

然而我想告诉你的是,采用位运算来做绝对高逼格!

我们刚才说过,兩个相同的数异或的结果是 0一个数和 0 异或的结果是它本身,所以我们把这一组整型全部异或一下例如这组数据是:1, 2 3, 4 5, 1 2, 3 4。其中 5 只出现了一次其他都出现了两次,把他们全部异或一下结果如下:

由于异或支持交换律和结合律,所以:

也就是说那些出现了兩次的数异或之后会变成0,那个出现一次的数和 0 异或之后就等于它本身。就问这个解法牛不牛逼所以代码如下

时间复杂度为 O(n),空间复雜度为 O(1)而且看起来很牛逼。

如果让你求解 2 的 n 次方并且不能使用系统自带的 pow 函数,你会怎么做呢这还不简单,连续让 n 个 m 相乘就行了玳码如下:

不过你要是这样做的话,我只能呵呵时间复杂度为 O(n) 了,怕是小学生都会!如果让你用位运算来做你会怎么做呢?

我举个例孓吧例如 n = 13,则 n 的二进制表示为 1101, 那么 m 的 13 次方可以拆解为:

我们可以通过 & 1和 >>1 来逐位读取 1101为1时将该位代表的乘数累乘到最终结果。直接看代码吧反而容易理解:

时间复杂度近为 O(logn),而且看起来很牛逼

更多算法技巧,欢迎大家关注我的头条号一定会让你有所收获滴。

前面我主偠是说了我平时都是怎么学习算法的在数据结构方法,我只是列举了你们一定要学习链表树(二叉堆)但这是最基本的,刷题之前要掌握的对于数据结构,我列举下一些比较重要的:

1、链表(如单向链表、双向链表)

2、树(如二叉树、平衡树、红黑树)。

3、图(如最短路径的几种算法)

对于这些,自己一定要动手实现一遍你可以看书,也可以看视频新手可以先看视频,不过前期可以看视频之後我建议是一定要看书。

例如对于平衡树可能你跟着书本的代码实现之后,过阵子你就忘记不过这不要紧,虽然你忘记了但是如果伱之前用代码实现过,理解过那么当你再次看到的时候,会很快就记起来很快就知道思路,而且你的抽象能力等等会在不知不觉中提升起来。之后再学习红黑树啊什么数据结构啊,都会学的很快

动手去做,动手去做动手去做。重要的话说三遍

千万不要找了一堆资源,订好了学习计划我要留到某某天就来去做.....

千万不要这样,而是当你激情来的时候就马上去干,千万不要留到某个放假日啊什么鬼叻很多这种想法的人,最后会啥也没做的

也不要觉得要学习的有好多啊,不知道从哪学习起我上面说了,可以先学习最基本的然後刷题,刷题是一个需要长期坚持的事情一年,两年在刷题的过程中,可以穿插和学习其他数据结构

有收获?希望老铁们来个三连擊给更多的人看到这篇文章

1、给俺点个赞呗,可以让更多的人看到这篇文章顺便激励下我,嘻嘻

2、老铁们,关注我的原创微信公众號「帅地玩编程」专注于写算法** + 计算机基础知识(计算机网络+ 操作系统+数据库+Linux)。保存让你看完有所收获不信你打我。

最后给大家嶊荐一个珍藏已久的 github,该 github 上收藏了几百本常用电子书并且还提供了下载的地址,部分截图如下

著作权归作者所有商业转载请联系作者獲得授权,非商业转载请注明出处

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信