算法题题解
文章平均质量分 51
算法是面试通过的敲门砖,可以说面试的大部分印象都来源于你是否做对了算法题
Strom72
高级Java开发工程师,关注我,了解Java开发人员的正确开发姿势~
展开
-
字符串的排列(全排列)——Java、回溯法
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。Solution:从这张图中,我们可以看出来,找全排列类似于深度优先遍历,深度优先最关键的就是要记住上一个状态,而所谓回溯就是要回到上一没...原创 2018-06-19 21:04:03 · 9302 阅读 · 2 评论 -
第一个只出现一次的字符——Java
在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置。可以通过空间换取时间的方式来降低时间复杂度,最简单的想法是通过一个map来保存字母以及它出现过的次数,然后再从头遍历一边,找到第一个只出现过一次的数,代码如下:import java.util.*;public class Solution { public int F...原创 2018-06-19 20:06:03 · 285 阅读 · 0 评论 -
丑数问题——动态规划、Java
题目描述把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。这道题使用动态规划是比较易于理解的一种解法。思路如下:丑数只包含因子2、3、5,那么反过来想,1、2、3、5这几个数组合相乘起来就能得到一个丑数,更进一步,一个丑数乘以2、3、5后可以得到另一个丑数,因此,我们可以...原创 2018-06-17 16:37:58 · 1123 阅读 · 0 评论 -
Dijkstra算法——java实现
面试时遇到Dijkstra算法,这个算法我是知道的,但是没具体写过,所以答题比较慢,抽时间实现了下这个算法。 Dijkstra算法基本思路:该算法的基本思路是这样的,从起始点开始,将未访问过的相邻节点加入一个优先队列,类似于广度优先算法,然后从该队列中取出节点考虑:对于单个节点,找出其所有相邻边,对于其邻接节点,计算总长度,如果该邻接节点的长度大于从该节点的长度,则更新路径为该节点...原创 2018-09-08 18:13:06 · 870 阅读 · 0 评论