
算法
wisgood
这个作者很懒,什么都没留下…
展开
-
判断整数序列是不是二元查找树的后续遍历结果
boolean vertify(int[] sequence,int length){if(sequence == null||lengthreturn false;int root = sequence[length-1];int i = 0;for (; i {if(sequence[i]>root)break;}int j = i;for (;原创 2013-10-17 22:38:51 · 797 阅读 · 0 评论 -
输入一个字符串,输出该字符串中字符的所有组合
/*** */public static void main(String[] args){// TODO Auto-generated method stubchar[] c = new char[]{'a','b','c','d','e','f','g','h'};for (int i = 1; i {LinkedList list = new原创 2013-10-17 22:42:16 · 3425 阅读 · 0 评论 -
面试10大算法汇总+常见题目解答
以下用Java角度解释面试常见的算法和数据结构:字符串,链表,树,图,排序,递归 vs. 迭代,动态规划,位操作,概率问题,排列组合,以及一些需要寻找规律的题目。1. 字符串和数组首先需要注意的是和C++不同,Java字符串不是char数组。没有IDE代码自动补全功能,应该记住下面的这些常用的方法。toCharArray() //获得字符串对应的char数组转载 2013-12-17 09:16:31 · 932 阅读 · 0 评论 -
各种排序算法时间复杂度和空间复杂度表
转载 2014-02-22 21:04:59 · 1581 阅读 · 0 评论 -
经典面试题:链表的相交与环问题
1、 给出两个单向链表的头指针pHead1和pHead2,判断这两个链表是否相交。假设两个链表均不带环。 示意图如下:如果两个链表相交于某一节点,那么在这个相交节点之后的所有节点都是两个链表所共有的。也就是说,如果两个链表相交,那么最后一个节点肯定是共有的。先遍历第一个链表,记住最后一个节点,然后遍历第二个链表,到最后一个节点时和第一个链表的最后一个节点做比较,如果相同,则相交,否则不转载 2014-02-23 14:44:52 · 948 阅读 · 0 评论 -
求子数组的最大和
题目:求子数组的最大和 输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为 O(n) 。 例如输入的数组为 1, -2, 3, 10, -4, 7, 2, -5 ,和最大的子数组为 3, 10, -4, 7, 2 ,因此输出为该子数组的和18 。原创 2014-02-23 14:02:43 · 721 阅读 · 0 评论 -
单链表的遍历和逆转
public class Test {public static void main(String[] args) {LNode linklist = new LNode("a");LNode b = new LNode("b");LNode c = new LNode("c");LNode d = new LNode("d");LNode e = new原创 2014-02-23 15:22:29 · 1017 阅读 · 0 评论 -
在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。
法1:如果要知道一个字符是否只出现过一次,必须遍历一次字符串知道所有字符出现过的情况。在遍历中要用数组统计每个字符的出现次数,到最后将,再遍历一遍数组,得到出现次数为1的第一个字符,取出。空间复杂度:O(1)时间复杂度:O(n) 我们创建一个长度为256的数组,每个字母根据其ASCII码值作为数组的下标对应数组的对应项,而数组中存储的是每个字符对应的次数原创 2014-02-23 17:01:06 · 1502 阅读 · 0 评论 -
汉诺塔递归算法
汉诺塔递归算法原创 2014-02-22 11:04:01 · 1518 阅读 · 0 评论 -
算法-求二进制数中1的个数
问题描述任意给定一个32位无符号整数n,求n的二进制表示中1的个数,比如n = 5(0101)时,返回2,n = 15(1111)时,返回4这也是一道比较经典的题目了,相信不少人面试的时候可能遇到过这道题吧,下面介绍了几种方法来实现这道题,相信很多人可能见过下面的算法,但我相信很少有人见到本文中所有的算法。如果您上头上有更好的算法,或者本文没有提到的算法,请不要吝惜您的代码,分享的时候,也原创 2014-02-24 09:23:39 · 1184 阅读 · 0 评论 -
设计一个算法,从顺序表中删除所有值为x的元素
public static void main(String[] args){// TODO Auto-generated method stubint[] a = {1,2,4,78,0,45,0,0,0,89};int i = 0;while(i{i++;}for(int j = i+1;j{if(a[j]!=0){a[i] = a[j];原创 2013-10-17 22:37:42 · 16620 阅读 · 0 评论 -
矩阵相乘问题 算法导论动态规划P197
public static void main(String[] args){// TODO Auto-generated method stubint[] a = {30,35,15,5,10,20,25};int[][] m = new int[a.length][a.length];int[][] s = new int[a.length][a.length];i原创 2013-10-17 22:36:38 · 1075 阅读 · 0 评论 -
输入一个字符串,输出该字符串中最大对称子串的长度
/** * 在这里加入功能说明 *输入一个字符串,输出该字符串中最大对称子串的长度。例如输入字符串:“google”,该字符串中最长的子字符串是“goog”,长度为4,因而输出为4。 * @author wangxiaowei * @version $Revision: 1.4 $, 2012-10-11$ */public class Alo13{/**原创 2013-10-17 22:43:30 · 3043 阅读 · 0 评论 -
求圆圈中剩下的最后一个数字
题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。public class Algorithms01{/*** */public static void main(Strin原创 2013-10-17 22:31:16 · 961 阅读 · 0 评论 -
和为n的连续正数序列
public static void main(String[] args){int n = 15890;int small = 1;int big =2;int mid = (1+n)/2;int sum = small+big;while(small{if(sum == n){for (int i = small; i {System.out原创 2013-10-17 22:39:34 · 911 阅读 · 0 评论 -
字符串全排列算法
static char[] a = {'a','b','c','d','e'};/*** */public static void main(String[] args){// TODO Auto-generated method stubperm(a, 0);}public static void perm(char[] a,int begin原创 2013-10-17 22:41:07 · 807 阅读 · 0 评论 -
12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?
/*** */public static void main(String[] args){// TODO Auto-generated method stubInLineProblem(0, 0, 12); System.out.println("总共的排列数目为:"+totalNum);}static int totalNum = 0;原创 2013-10-17 22:42:02 · 2172 阅读 · 0 评论 -
打靶问题。一个射击运动员打靶,靶一共有10环,连开10 枪打中90环的可能性有多少?
static int totalSum = 0;/*** */public static void main(String[] args){// TODO Auto-generated method stubint sum = 90;int num = 10;List list = new LinkedList();f(num, sum, lis原创 2013-10-17 22:42:44 · 2772 阅读 · 0 评论 -
数组的旋转
/** * 在这里加入功能说明 *问题描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。 * @author wangxiaowei * @version $Revision: 1.4 $, 2012-原创 2013-10-17 22:44:23 · 1231 阅读 · 0 评论 -
把字符串转换成整数
题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串"345",则输出整数345。String string = "12345";int sum = 0;for (int i = 0; i {int temp = string.charAt(i)-'0';sum*=10;sum+=temp;System.out.println("该位值原创 2013-10-17 22:35:03 · 794 阅读 · 0 评论 -
装配线调度问题 算法导论动态规划P194
public static void main(String[] args){// TODO Auto-generated method stubint[][] a ={{ 7, 9, 3, 4, 8, 4 },{ 8, 5, 6, 4, 5, 7 } };int[][] t ={{ 2, 3, 1, 3, 4 },{ 2, 1, 2, 2, 1 }原创 2013-10-17 22:35:38 · 961 阅读 · 0 评论 -
排序算法
【冒泡排序算法】public static void BubbleSort(int[] arrays){for (int i = 0; i {for (int j = 0; j {if (arrays[j]>arrays[j+1]){int temp = arrays[j+1];arrays[j+1] = arrays[j];arrays[j] = te原创 2014-03-01 14:06:14 · 833 阅读 · 0 评论