算法
文章平均质量分 61
临酒
我想在此,开间酒馆,名叫夜未央。
只卖醉生梦死。
既然相遇,就是缘分,酒钱,可以是你的故事,你的笑容,抑或只是你的一道伤疤。
客官,坐下来一杯吧,洗洗风尘,忘了忧伤。
侠情,在这一瞬间被点燃。
展开
-
替换字符串中的空格为其他字符
思路:将一个字符串每一位上的字符存入一个String数组,依次遍历每一位,遇到空格则将其替换为指定的其他字符,代码如下:public class Solution { public String replaceSpace(StringBuffer str) { String mes = str.toString(); String[] strArray = n原创 2016-05-16 19:22:29 · 508 阅读 · 0 评论 -
给定K个整数,找出由这K个整数组成的最小的数字
思路:先找出这几个整数元素所有的全排列,然后比较哪一个最小即可,全排列的求法可以看我的这篇博客:http://blog.csdn.net/zx582727090/article/details/52171084代码如下:import java.util.ArrayList;import java.util.TreeSet;public class Solution { publi原创 2016-08-11 13:16:15 · 736 阅读 · 0 评论 -
给定一个非负整数n,统计1~n中所有数中1出现的次数
思路:遍历1~n的所有数,把每个数都转为char数组,然后看1在数组中出现的次数,统计返回即可。代码如下:public class Solution { public int NumberOf1Between1AndN_Solution(int n) { int count = 0; for(int i=1;i<=n;i++){原创 2016-08-10 17:47:09 · 2989 阅读 · 0 评论 -
给定一个数组,找出这个数组最大连续子数组的和
将这个连续子数组分为两部分,一个是前缀,一个是后一个元素,要使这个连续子数组最大,那么它的前缀肯定不能为负,不然这个前缀对即将加上的值就无意义,用一个max记录最大值,每次当前缀加上后一个元素的时候判断和是否大于max,大于则更新max,再判断和是否小于0,小于0则将前缀更新为0,继续加下一个元素,依次类推,直到数组末尾,max即为最大子数组和。代码如下:public class So...原创 2016-08-10 17:13:03 · 3753 阅读 · 0 评论 -
找出一个数组中最小的K个元素
思路:看到这个题的第一瞬间我就想到了TreeSet,利用TreeSet在插入元素的时候会进行排序这一特性,这道题还有什么难度呢?遍历数组将所有元素存入TreeSet,然后再遍历TreeSet,取出需要的前K个元素即可。代码如下:import java.util.TreeSet;import java.util.ArrayList;public class Solution {原创 2016-08-10 16:30:31 · 504 阅读 · 0 评论 -
数组中至多有一个出现次数大于数组长度一半元素,找出这个元素
用一个HashMap就可以很简单的解决这个问题,用HashMap的key存储这个元素,用value存储这个元素出现的次数,遍历数组,每遍历到一个数组就把他put进map,在put之前先检查map中是否已有这个元素,有的话取出value并加一,检查是否大于数组的一半,大于则返回这个元素,否则将加一后的value和key存入map。代码如下:import java.util.HashMap;p原创 2016-08-10 16:02:58 · 527 阅读 · 0 评论 -
利用递归解决全排列问题
什么是排列?一般地,从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列,叫做从n个元素中取出m个元素的一个排列。特别地,当m=n时,这个排列被称作全排列。拿字符串举例,就是找出这个字符串的所有元素组成的所有不同的序列,注意,这些序列具有唯一性,所以就要仔细考虑字符串存在相同元素的情况。abc这样的一个字符串,它的全排列就有:abc、acb、bac、bca、cba、cab不妨原创 2016-08-10 14:34:36 · 638 阅读 · 0 评论 -
给定一棵二叉树,找出这棵二叉树的镜像
思路:什么是二叉树的镜像?仔细观察其实可以发现,二叉树的镜像其实就是原二叉树所有节点的左右子树互相交换后的结果,所以可以用一个递归来解决问题,依次递归二叉树的所有节点,然后交换这个节点左右子树,直到根节点,代码如下:/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right原创 2016-07-12 17:08:38 · 531 阅读 · 0 评论 -
大话算法之归并排序
归并排序的核心思想是分治法,将一个需要排序的数组分成很多个部分,使每一部分分别有序之后再合并两部分,最后整个数组就会是一个有序的数组。算法设计采用两部分解决,一部分将数组分成两部分,递归直到子数组只有一个元素,另一部分负责合并两个子数组,从两个子数组第一个元素开始遍历,选取小的一个作为合并好的数组的第一个,第二次比较被选取了元素的数组的第二个元素和另一个数组的第一个元素,以此类推,直到两个子数原创 2016-06-06 17:12:41 · 390 阅读 · 0 评论 -
判断一棵二叉树是不是另一棵二叉树的子树
定义:父树包含子树的所有节点,注意,空树不是任何数的子树。父树:A 子树:B解法:用递归来实现,从A树的根节点开始,判断其所有的节点是不是依次和树B相同,如不同,递归调用函数,继续判断树A当前节点的左子树的所有节点或右子树的所有节点是否和树B所有节点相同,直到遍历到父树A的叶子节点,如果不是完全相同,则树B不是树A子树,如果直到遍历到树B的叶子节点,其所有节点在树A中均有,则树B是树A原创 2016-06-04 16:33:37 · 2377 阅读 · 0 评论 -
用两个栈实现队列
队列:先进先出栈:先进后出,后进先出要点:让一串数据依次出入两个栈之后,恰好就是队列取出插入数据的顺序思想:执行push操作时,将数据压入第一个栈,执行pop操作时,先检查第二个栈是否为空,不为空,返回栈顶元素,如果为空,依次取出栈一中的元素存入栈二,然后返回栈二栈顶元素。代码如下:import java.util.Stack;public class Solution {原创 2016-05-18 17:27:28 · 249 阅读 · 0 评论 -
将一个链表倒序输出
思路一:遍历所有节点,将所有节点的值按顺序存入List,从尾部开始遍历这个list,将遍历值按顺序存入一个list2,返回list2,实现代码如下:import java.util.ArrayList;public class Solution { public ArrayList printListFromTailToHead(ListNode listNode) {原创 2016-05-17 19:58:35 · 828 阅读 · 0 评论 -
重建二叉树,给出一个二叉树的前序和中序遍历,恢复二叉树的结构
思路:前序遍历:根节点-左子树-右子树 中序遍历:左子树-根节点-右子树 后序遍历:左子树-右子树-根节点前序遍历的第一个元素即为根节点,找出这个节点在中序遍历中的位置,由中序遍历定义可知,根节点左侧即为左子树,右侧即为右子树,用一个递归继续找出根节点的左子树的根节点,根节点右子树的根节点,将根节点左右子树分别指向这两个节点,继续递归,直到左右子数都原创 2016-05-18 16:48:05 · 453 阅读 · 0 评论 -
二维数组查找
思路:二维数组,每一行每一列均按从小到大有序排列。选取左下角元素,从这点开始,需要查找的元素比当前点小则上移,大则右移。代码如下,用一个递归实现:public class Solution { public boolean Find(int [][] array,int target) { if(array[0].length==0){ return原创 2016-05-15 21:39:25 · 314 阅读 · 0 评论