很多人开始学习java时,都是抱着诸如《Thinking in java》、《疯狂java》等书籍,从前到后慢慢翻看,不管其内容重要与否,也不关心自己以后能否使用到。我的建议是,初学者只需要关注基础语法,对一些多线程、网络编程、JDBC等,先放放,心里有个概念就好,知道当我要并发处理任务时要去翻多线程,使用某些网络服务时翻网络编程,需要访问数据库时翻JDBC等,不是说他们不重要,相反,他们非常之重要,只是如果结合具体场景学习的话,事半功倍。具体的语法我就不详细说了,各种参考资料一大堆。
程序员,写代码是基本功,所谓的写代码,实质就是用计算机语言去解决问题,底下若干算法题,是我出给刚入职的小伙伴做的。刚入职的小伙伴不断的写简单算法,写到看到一个问题,就能够考虑到用什么数据结构去解决该问题,那么不仅仅能够给他们信心,同样也能奠定夯实的基础。有的小伙伴就问了,我是要学习“真正”的软件开发,你让我写这些“简单”算法有什么意思?还未入门的程序员有这种想法并不奇怪,我们在做项目时,无非也只是结合具体业务场景,各种if.....else、for循环啥的,然后充斥着各种数据结构,如数组、list、Map等等罢了,即便是复杂算法,也就是这么些简单基石构建而成。
底下9道简单算法,一眼望过去,你就有了思路,并且能够麻溜的敲出来,那么恭喜,你已经半只脚踏入了程序员的大门,后期只要结合具体的框架以及场景,你就能干活了,哈哈。
(1)输入一个字符串,去除所有重复的字符,保持字符出现顺序,输出结果。
例:输入 abbcdeacf
输出 abcdef
(2)输入一个字符串,字符个数为偶数,例如2、4、6、8...,先将第奇数位的字符依次输出,接着将第偶数位的依次输出(此处的第*位,从1开始,不同于数组下标0开始)。
例:输入 abcdef
输出 acebdf
(3)输入一组数字,数量大于3,取第2小以及第2大的数相加,并输出结果。
例:输入 1 2 3 4 5 6
输出 7
输入 1 2 3
输出 4
(4)输入一串字符,输出所有不同字符,不需要考虑输出顺序。
例: 输入 abccdfffacc
输出 abcdf
(5)我有一些钱,从第一天开始,每天花掉我身上钱的一半加1元,到第十天,我就剩下1元,请问我一开始有多少钱。
(无输入,直接写算法解决问题,递归算法)
(6)输入一个十进制,输出它对应的二进制字符串。
例: 输入 5
输出 101
(7)输入一个字符串,输出其中最长的对称字符串,如有多个,随便哪个。(关键在于怎么解决这个问题,没有特别的算法)
例:输入 a
输出 a
输入 xabcdcbayfd
输出 abcdcba
(8)编写一个简单算法,接收一个字符串,找出其中出现次数最多的字符,若有多个次数相同的,随便哪个。
例: 输入 aaaabc
输出 a
(9)编写一个简单算法,生成一个num长度的随机字符串,字符可以是大写字母、小写字母、数字、_、$,不可以数字打头。
例: 输入 3
输出 $2s