算法
留住这时光
这个作者很懒,什么都没留下…
展开
-
Java下实现无重字符串的全排列(递归和回溯方法)
给定一个无重复字符的字符串数组,实现它的全排列一、采用递归实现全排列思想是从第一个字符开始排,一直排到只有一个字符那么就说明一个排列完成了。否则就交换当前第k个字符和第i个字符(这里的第i个字符指的是k后面所有字符的其中一个,例如abcd,当a固定,对bcd排列,那就要将b和c、b和d依次交换),再对k+1到m进行排列。当返回成功后就再将第k个字符和第i个字符再交换回来。递归的终止条件就是k=mk...原创 2018-03-16 23:20:57 · 1725 阅读 · 0 评论 -
并查集
并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了。以前我无法解决的一类问题竟然可以用如此简单高效的方法搞定。不分享出来真是对不起party了。(party:我靠,关我嘛事啊?我跟你很熟么?)来看一个实例,HDU1232畅通工程首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个点,让你判断它们是否...转载 2018-03-16 23:26:11 · 182 阅读 · 0 评论 -
如何找到所有最长公共子序列集合
如何找到所有最长公共子序列集合1. 问题描述:一个给定序列的子序列是在该序列中删去若干元素后得到的序列。确切的说,若给定序列X={x1,x2,…,xm},则另一序列Z={z1,z2,…,zk},X的子序列是指存在一个严格递增下标序列{i1,i2,…,ik}使得对于所有j=1,2,…k有zj=xij 例如,序列Z={B,C,D,B}是序列X={A,B,C,B,D,A,B}的子序列,相应的递增下标...原创 2018-11-14 10:38:23 · 2913 阅读 · 2 评论 -
手撕快排
手撕快排没有自己动手写过虽然知道思想,但是实际写的时候一些边界条件控制不好,只有一个一个代码的敲上去才能学到,而且写一次会忘,那就重复写,我现在是发现自己的学习方法有问题,很多东西以为看一遍理解了思想就够了,其实毫无用处,多看几遍也无济于事,面试被问到还是说不清楚讲不明白。学东西说得深入点是学做东西,不动手做又如何掌握,梅西练习了无数次盘带,才有了被上帝亲吻的身姿和技巧,世间万物也是如此。心里要...原创 2018-11-14 16:49:27 · 1176 阅读 · 1 评论 -
常见动态规划问题
定义:动态规划(Dynamic Programmaing)是解决决策过程中最优化的数学方法。因为问题的多样性导致决策过程中的决策方法不同,所以动态规划没有统一的算法,不同问题要具体分析找出规律。适用情况:用DP要满足3个条件:①最优子结构(一个最优的结构的子结构一定是最优的)②无后向性(过去的决策不能影响未来的决策,之前是怎么到达这个状态的我不管,我只管在这个状态下,也就是说某...原创 2018-09-05 16:13:49 · 889 阅读 · 0 评论